문제

실행하고 있는 응용 프로그램을 통해 gdb 하고 싶은 중단점을 설정 시간에 대한 특정한 변수가 액세스/변경되었습니다.좋은 방법이 있을 하기를 위한 이?또한 것에 관심이 있는 다른 방법으로 모니터링하는 변수에 C/C++을 보면 그것을 변경합니다.

도움이 되었습니까?

해결책

시계 만 나누기,쓰기 rwatch 당신이 휴식에서 읽고 조사 당신이 휴식에 읽기/쓰기.

당신은 설정할 수 있습니다 읽 watchpoints 에는 메모리 위치:

gdb$ rwatch *0xfeedface
Hardware read watchpoint 2: *0xfeedface

그러나 하나의 제한 적용 rwatch 및 조사 명령은;사용할 수 없습니다 gdb 변수 식:

gdb$ rwatch $ebx+0xec1a04f
Expression cannot be implemented with read/access watchpoint.

그래서 당신은 그들을 확장하기 위하여 자신

gdb$ print $ebx 
$13 = 0x135700
gdb$ rwatch *0x135700+0xec1a04f
Hardware read watchpoint 3: *0x135700 + 0xec1a04f
gdb$ c
Hardware read watchpoint 3: *0x135700 + 0xec1a04f

Value = 0xec34daf
0x9527d6e7 in objc_msgSend ()

편집: 아,그리고 방법입니다.당신이 필요하거나 하드웨어 또는 소프트웨어 지원.소프트웨어입니다 많은 분명히 느립니다.있는지 알아보려면 OS 를 지원하는 하드웨어 watchpoints 당신이 볼 수 있습니다 수용-hw-watchpoints 환경을 설정합니다.

gdb$ show can-use-hw-watchpoints
Debugger's willingness to use watchpoint hardware is 1.

다른 팁

가정 먼저 답변을 참조하는 C-구문 (char *)(0x135700 +0xec1a04f) 그 대답을 할 rwatch *0x135700+0xec1a04f 잘못된 것입니다.정확한 구문 rwatch *(0x135700+0xec1a04f).

의 부족 ()s 가 발생으로 고통을 사용하려고 watchpoints 자신입니다.

당신이 찾고있는 무엇이라고 불 감시점.

사용법

(gdb) watch foo:의 값을 조사 변수 foo

(gdb) watch *(int*)0x12345678:시계 값을 지적해 주소, casted 하는 어떠한 형태의 원

(gdb) watch a*b + c/d:시계는 임의로 복잡한 표정, 에서 유효한 프로그램의 기본 언어

Watchpoints 의 세 가지 종류:

  • 시계:gdb 것입니다 깰 때 가 발생합
  • rwatch:gdb 것입니다 휴식 wnen a 읽기 가 발생합
  • 조사:gdb 이에서 휴식을 두 경우 모두

당신이 선택할 수 있습에 대한 적절한 필요합니다.

자세한 정보는 확인 니다.

다만 다음과 같다:

 $ cat gdbtest.c
 int abc = 43;

 int main()
 {
   abc = 10;
 }
 $ gcc -g -o gdbtest gdbtest.c
 $ gdb gdbtest
 ...
 (gdb) watch abc
 Hardware watchpoint 1: abc
 (gdb) r
 Starting program: /home/mweerden/gdbtest 
 ...

 Old value = 43
 New value = 10
 main () at gdbtest.c:6
 6       }
 (gdb) quit

그래서 가능한 것 같다,하지만 당신은 나타나지 않을 필요가 일부는 하드웨어 지원합니다.

사용 시계를 보면 변수를 기록,rwatch 읽을 때와 조사 때에는 읽기/쓰/에서 위에서 언급한 바와 같이.그러나,주의하시기 바랍는 이 명령을 사용하려면,당신은 중단해야 프로그램,그리고 변수는 범위 내에 있어야 합할 때 깨 프로그램:

시계에 사용 명령입니다.인수를 명령입니다 는 표현을 평가합니다.이 의미는 variabel 할 를 설정 감시점에 있어야 합 현재의 범위가 있습니다.그래서,설정 감시점에 비 글로벌 변수 설정해야 합단점 는 정지할 때 프로그램을 변수가 범위에 있습니다.당신이 설정 감시점은 후 프로그램이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top