답변:
set print elements 0
set print elements
number-of-elements
배열 GDB에서 인쇄 할 요소 수에 제한을 설정하십시오. GDB가 큰 배열을 인쇄하는 경우 set print elements
명령에서 설정 한 요소 수를 인쇄 한 후 인쇄를 중지합니다 . 이 제한은 문자열 표시에도 적용됩니다. GDB가 시작되면이 한계는 200으로 설정됩니다. 요소 수 를 0으로 설정 하면 인쇄가 무제한임을 의미합니다 .
프로그램이 정상 상태 인 한 call (void)puts(your_string)
stdout에 인쇄 할 수도 있습니다 . 실제로 디버거에서 사용할 수있는 모든 기능에 동일한 원칙이 적용됩니다.
세 번째 옵션 인 x 명령이 있습니다. x 명령을 사용하면 전역 설정을 변경하는 대신 특정 명령에 대해 다른 제한을 설정할 수 있습니다. 문자열의 처음 300자를 인쇄하려면을 사용할 수 있습니다 x/300s your_string
. 출력이 읽기 어려울 수 있습니다. 예를 들어 SQL 쿼리를 인쇄하면 다음과 같은 결과가 발생합니다.
(gdb) x / 300sb stmt.c_str () 0x9cd948 : "SELECT article.r"... 0x9cd958 : "owid FROM articl"... ..
x
!
이 printf
명령은 전체 문자열을 인쇄합니다.
(gdb) printf "%s\n", string
set print elements nnn
제한 을 존중하는 것 같으며 , 그렇지 않으면 전체 문자열을 인쇄하지 않습니다 set print elements 0
.
완료하기 만하면됩니다.
(gdb) p (char[10]) *($ebx)
$87 = "asdfasdfe\n"
길이를 지정해야하지만 해당 문자열의 표현이 변경 될 수 있습니다.
(gdb) p/x (char[10]) *($ebx)
$90 = {0x61,
0x73,
0x64,
0x66,
0x61,
0x73,
0x64,
0x66,
0x65,
0xa}
값으로 디버그하려는 경우 유용 할 수 있습니다.
사용하면 set elements ...
항상 가장 좋은 방법이 아니다. 별개의 것이 있다면 유용 할 것이다 set string-elements ...
.
그래서 나는 .gdbinit에서 다음 함수를 사용합니다.
define pstr
ptype $arg0._M_dataplus._M_p
printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end
define pcstr
ptype $arg0
printf "[%d] = %s\n", strlen($arg0), $arg0
end
주의 사항 :