我正在使用通过MacPorts for Snow Leopard编译的GDB 7.1调试二进制文件(仅限程序集)。我对使用find
gdb命令找到的特定地址感兴趣。所以,它确实是一个有效的地址:
(gdb) printf "%s\n", 0x00196f34
bruno
(gdb)
问题是每当我为它设置一个观察点(watch *0x00196f34
)并且它被访问时,系统会立即崩溃并重新启动。
我注意到硬件观察点已启用,然后期望不太严重的结果,我使用set can-use-hw-watchpoints 0
切换到软件观察点,但这无法解决问题
我尝试使用Xcode附带的gdb 6.3
版本, watch 正常工作。在为6.3和7.1设置这样的手表时,我注意到了一些区别:
for gdb 6.3
(gdb) watch *0x00196f34
Watchpoint 1: *0x00196f34
(gdb) info breakpoints
Num Type Disp Enb Address What
1 watchpoint keep y *0x00196f34
for gdb 7.1
(gdb) watch *0x00196f34
Hardware watchpoint 1: *1666868
(gdb) info breakpoints
Num Type Disp Enb Address What
1 hw watchpoint keep y *1666868
为什么旧的gdb工作,以十六进制打印,而新的gdb将地址转换为十进制数?我仍然想使用gdb 7,所以任何线索在这里发生了什么?
Bruno Velasco