반응형
gdb에서 긴 문자열의 전체 값을 어떻게 인쇄합니까?
GDB에서 C- 문자열의 전체 길이를 인쇄하고 싶습니다. 기본적으로 약어로 표시되므로 GDB가 전체 문자열을 인쇄하도록하려면 어떻게합니까?
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"... ..
이 printf
명령은 전체 문자열을 인쇄합니다.
(gdb) printf "%s\n", string
완료하기 만하면됩니다.
(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
주의 사항 :
- 첫 번째는 std :: string 멤버에 액세스하므로 c ++ lib에 따라 다르지만 쉽게 조정할 수 있습니다.
- 두 번째는 strlen을 호출 할 때 실행중인 프로그램에서만 사용할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/233328/how-do-i-print-the-full-value-of-a-long-string-in-gdb
반응형
'development' 카테고리의 다른 글
Windows cmd에서 사용자 입력을 요청하고 다른 명령에서 결과를 사용하려면 어떻게합니까? (0) | 2020.02.29 |
---|---|
Windows 8 런타임 (WinRT / Windows Store 앱 / Windows 10 Universal App)은 Silverlight 및 WPF와 어떻게 다릅니 까? (0) | 2020.02.29 |
리눅스 / 유닉스 프로세스의 최대 메모리 사용량 (0) | 2020.02.29 |
WPF에도 MessageBox가 있습니까? (0) | 2020.02.29 |
팬더 데이터 프레임의 인덱스를 열로 변환하는 방법은 무엇입니까? (0) | 2020.02.29 |