설정할 수 있습니점에서'메모리 액세스'에서는 GDB?
-
09-06-2019 - |
문제
실행하고 있는 응용 프로그램을 통해 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 할 를 설정 감시점에 있어야 합 현재의 범위가 있습니다.그래서,설정 감시점에 비 글로벌 변수 설정해야 합단점 는 정지할 때 프로그램을 변수가 범위에 있습니다.당신이 설정 감시점은 후 프로그램이다.