반응형
gdb에서 긴 문자열의 전체 값을 인쇄하려면 어떻게 해야 합니까?
GDB에서 C 문자열의 전체 길이를 인쇄하고 싶습니다. 기본적으로는 문자열 전체를 인쇄하려면 어떻게 해야 합니까?
set print elements 0
set print elements
number-of-elements
어레이 GDB의 요소 수를 제한합니다.GDB가 대규모 어레이를 인쇄하고 있는 경우, GDB는 에 의해 설정된 요소의 수를 인쇄한 후 인쇄를 중지합니다. set print elements
명령어를 입력합니다.이 제한은 문자열 표시에도 적용됩니다.GDB가 시작되면 이 제한은 200으로 설정됩니다.
요소 수를 0으로 설정하면 인쇄가 무제한이 됩니다.
프로그램이 정상적인 상태라면call (void)puts(your_string)
출력할 수 있습니다.실제로 디버거에서 사용할 수 있는 모든 함수에 동일한 원리가 적용됩니다.
그printf
명령어는 문자열 전체를 인쇄합니다.
(gdb) printf "%s\n", string
세 번째 옵션인x 명령어에서는 글로벌 설정을 변경하는 대신 특정 명령어에 다른 제한을 설정할 수 있습니다.사용할 수 있는 문자열의 처음 300자를 인쇄하려면x/300s your_string
출력은 읽기 어려울 수 있습니다.예를 들어 SQL 쿼리를 인쇄하면 다음과 같은 결과가 됩니다.
(gdb) x/300 mbs stmt.c_str()0x9cd948: "SELECT article.r"... 0x9cd958: "owid FROM arcticl"... ..
완료하기 위해서:
(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
반응형
'programing' 카테고리의 다른 글
Vuetify 외부 페이지 번호가 표시되지 않음 (0) | 2022.07.03 |
---|---|
C99 stdint.h 헤더 및 MS Visual Studio (0) | 2022.07.03 |
별도의 서브스트링을 만들지 않고 C스트링의 특정 부분만 출력할 수 있습니까? (0) | 2022.07.03 |
Vue 테스트 유틸리티의 "스텁된 하위 구성 요소"란 무엇입니까? (0) | 2022.07.03 |
Android Studio 오류: "매니페스트 병합 실패:Android 12인치용 앱 (0) | 2022.07.03 |