반응형
GDB의 어레이와 같은 포인터를 표시하는 방법
정의되어 있다고 가정합니다.int a[100]
유형print a
gdb는 자동으로 배열로 표시합니다.1, 2, 3, 4...
단, 만약a
파라미터로서 함수에 전달되면 gdb는 그것을 일반 int 포인터로 취급합니다.print a
다음과 같이 표시됩니다.(int *)0x7fffffffdaa0
를 참조하려면 어떻게 해야 합니까?a
배열로요?
여기 보세요.즉, 다음과 같은 작업을 수행해야 합니다.
p *array@len
*(T (*)[N])p
여기서 T는 유형, N은 요소의 수, p는 포인터입니다.
를 사용합니다.x
명령어를 입력합니다.
(gdb) x/100w a
@Ivaylo Strandjev가 여기서 말하는 것처럼 일반적인 구문은 다음과 같습니다.
print *my_array@len
# OR the shorter version:
p *my_array@len
처음 10바이트를 인쇄하는 예my_array
:
print *my_array@10
그러나 값을 문자로 해석하려고 하기 때문에 가비지처럼 보일 경우 다음과 같은 다른 포맷 옵션을 강제로 적용할 수 있습니다.
print/x *my_array@10
= 16진수print/d *my_array@10
= 부호 있는 정수print/u *my_array@10
= 부호 없는 정수print/<format> *my_array@10
= 일반 형식 문자열에 따라 인쇄합니다.<format>
여기 디버거에서 16바이트를 인쇄하기 위한 몇 가지 실제 예가 있습니다.uint8_t
명명된 배열byteArray
첫 번째 사람이 얼마나 못생겼는지 보세요.p *byteArray@16
:
(gdb) p *byteArray@16
$4 = "\000\001\002\003\004\005\006\a\370\371\372\373\374\375\376\377"
(gdb) print/x *byteArray@16
$5 = {0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}
(gdb) print/d *byteArray@16
$6 = {0, 1, 2, 3, 4, 5, 6, 7, -8, -7, -6, -5, -4, -3, -2, -1}
(gdb) print/u *byteArray@16
$7 = {0, 1, 2, 3, 4, 5, 6, 7, 248, 249, 250, 251, 252, 253, 254, 255}
이 경우 최적의 버전은 배열을 부호 없는 정수로 인쇄하는 마지막 버전입니다.uint8_t
어레이 애프터:
(gdb) print/u *byteArray@16
$7 = {0, 1, 2, 3, 4, 5, 6, 7, 248, 249, 250, 251, 252, 253, 254, 255}
(int[100])*pointer
@Ruslan의 댓글에 있는 제안 덕분에 저를 위해 일했습니다.
언급URL : https://stackoverflow.com/questions/14502236/how-to-view-a-pointer-like-an-array-in-gdb
반응형
'IT이야기' 카테고리의 다른 글
readdir()는 주문을 보증합니까? (0) | 2022.07.03 |
---|---|
오래된 요소 참조: 요소가 페이지 문서에 연결되어 있지 않습니다. (0) | 2022.07.03 |
Joda Time 라이브러리를 사용하여 날짜 문자열을 DateTime 개체로 변환 (0) | 2022.07.03 |
새로운 소재 테마에서 백 화살표의 색상을 변경하는 방법은 무엇입니까? (0) | 2022.07.03 |
자바 화면 해상도를 얻으려면 어떻게 해야 하나요? (0) | 2022.07.03 |