char*x가 값이 "hello"인 문자열을 가리킬 때 gdb에서 조건부 중단점을 설정하려면 어떻게 해야 합니까?
gdb가 x행에서 끊어지도록 지정할 수 있습니까?char* x
값이 같은 문자열을 가리킵니다."hello"
만약 그렇다면, 어떻게?
중단 조건 사용:$_streq
(GDB 자체 편의 기능 중 하나):
break [where] if $_streq(x, "hello")
또는 브레이크포인트가 이미 존재하는 경우 조건을 추가합니다.
condition <breakpoint number> $_streq(x, "hello")
GDB 7.5(오래 전) 이후로는 GDB 7.5와 기타 몇 가지 네이티브 편의 함수를 사용하여 다음과 같은 다양한 문자열 매칭을 수행할 수 있습니다.$_regex
Python regex 구문을 지원합니다.
$_memeq(buf1, buf2, length)
$_regex(str, regex)
$_streq(str1, str2)
$_strlen(str)
이것들은 통상적인 실행보다 훨씬 덜 문제가 된다.strcmp()
불필요한 부작용이 발생할 수 있기 때문에 프로세스의 스택에 주입됩니다.
아아, 네이티브 함수를 사용하는 것이 항상 가능한 것은 아닙니다. 왜냐하면 Python 지원으로 컴파일되는 GDB에 의존하기 때문입니다.일반적으로 이 값이 기본이지만 일부 제한된 환경에서는 이 값이 설정되지 않을 수 있습니다.만약을 위해 실행함으로써 확인할 수 있습니다.show configuration
GDB 내부 및 검색--with-python
이 셸 오닐라이너도 효과가 있습니다.
gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python'
사용할 수 있습니다.strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
회선번호입니다.x
임의의 파일명 및y
모든 변수를 지정할 수 있습니다.
break x if ((int)strcmp(y, "hello")) == 0
구현에 따라서는 gdb가 strcmp의 반환 유형을 인식하지 못할 수 있습니다.즉, 캐스팅을 해야 합니다.그렇지 않으면 항상 사실로 평가될 것입니다.
언급URL : https://stackoverflow.com/questions/4183871/how-do-i-set-a-conditional-breakpoint-in-gdb-when-char-x-points-to-a-string-wh
'programing' 카테고리의 다른 글
JEST 유닛 테스트스크립트가 TypeError: this로 실패합니다._environment.runScript는 함수가 아닙니다. (0) | 2022.07.16 |
---|---|
변수 개수의 인수를 printf/sprintf로 전달하는 방법 (0) | 2022.07.16 |
Vue.js/Vuex: Getter 호출과 라이프 사이클 생성 후 직접 상태 값에 액세스 (0) | 2022.07.16 |
루트 전환 시 VueJ 메모리누전 (0) | 2022.07.16 |
Java OCR 구현 (0) | 2022.07.16 |