char* x
값이 같은 문자열을 가리킬 때 gdb가 x 행에서 끊어 지도록 지정할 수 있습니까 "hello"
? 그렇다면 어떻게?
답변
당신은 사용할 수 있습니다 strcmp
:
break x:20 if strcmp(y, "hello") == 0
20
행 번호이며 x
모든 파일 이름 y
이 될 수 있으며 모든 변수가 될 수 있습니다.
답변
break x if ((int)strcmp(y, "hello")) == 0
일부 구현에서 gdb는 strcmp의 반환 유형을 알 수 없습니다. 그것은 당신이 캐스팅해야한다는 것을 의미합니다. 그렇지 않으면 항상 참으로 평가됩니다!
답변
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
을 지원하는을 사용해야 합니다 .