Answers:
观看仅在写入时中断,rwatch让您在读取时中断,而awatch让您在读取/写入时中断。
您可以在内存位置上设置读取监视点:
gdb$ rwatch *0xfeedface
Hardware read watchpoint 2: *0xfeedface
但是一个限制适用于rwatch和awatch命令;您不能在表达式中使用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 ()
编辑:哦,顺便说一句。您需要硬件或软件支持。软件显然慢得多。要了解您的操作系统是否支持硬件观察点,可以查看can-use-hw-watchpoints环境设置。
gdb$ show can-use-hw-watchpoints
Debugger's willingness to use watchpoint hardware is 1.
print &variable
watch
。同时,这是阅读以上内容后浮现在脑海中的第一个问题。rwatch *0xfeedface
实际上要看多少个字节?
rwatch *(int *)0xfeedface
,它将监视sizeof(int)
字节:sourceware.org/gdb/onlinedocs/gdb/Set-Watchpoints。 html
我只是尝试了以下方法:
$ 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
因此似乎有可能,但是您似乎确实需要一些硬件支持。
watch -location mTextFormatted
。