답변:
당신은 사용할 수 있습니다 strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
행 번호이며 x
모든 파일 이름 y
이 될 수 있으며 모든 변수가 될 수 있습니다.
No symbol "strcmp" in current context.
run
. 소스를 들어, 구글과 검색 : stackoverflow.com/questions/10000335/...을 :-)
$_streq
@tlwhitec의 메소드가 더 좋습니다.
GDB 7.5부터는 다음과 같은 기본 편의 기능을 사용할 수 있습니다 .
$_memeq(buf1, buf2, length)
$_regex(str, regex)
$_streq(str1, str2)
$_strlen(str)
strcmp()
중단 점에 도달 할 때마다 프로세스 스택에서 "외부"를 실행하는 것보다 훨씬 덜 문제가있는 것 같습니다 . 다중 스레드 프로세스를 디버깅 할 때 특히 그렇습니다.
GDB는 Python 지원으로 컴파일해야하며 현재 Linux 배포판의 문제는 아닙니다. 확실하게
show configuration
GDB 내부 에서 실행 하고을 검색하여 확인할 수 있습니다--with-python
. 이 작은 oneliner도 트릭을 수행합니다.$ gdb -n -quiet -batch -ex 'show configuration' | grep 'with-python' --with-python=/usr (relocatable)
데모 사례의 경우 사용법은
break <where> if $_streq(x, "hello")
또는 중단 점이 이미 존재하고 조건을 추가하려는 경우
condition <breakpoint number> $_streq(x, "hello")
$_streq
전체 문자열과 만 일치하므로 더 교활한 것을 원하면 Python 정규 표현식 구문$_regex
을 지원하는을 사용해야 합니다 .
strncmp
및strstr
기타 유용한 C 쿼리 기능입니다.