1

我正在使用通过 MacPorts 为 Snow Leopard 编译的 GDB 7.1 调试二进制文件(仅限程序集)。我对使用findgdb 命令找到的特定地址感兴趣。因此,它确实是一个有效的地址:

(gdb) printf "%s\n", 0x00196f34
bruno
(gdb)

问题是每当我为它设置一个观察点(watch *0x00196f34)并且它被访问时,系统会立即崩溃并重新启动。

我注意到当时启用了硬件观察点,期望结果不那么严重,我切换到使用软件观察点set can-use-hw-watchpoints 0,但这并没有解决问题。

我尝试使用gdb 6.3Xcode 附带的版本,并且手表工作正常。在为 6.3 和 7.1 设置此类手表时,我注意到了一个区别:

对于 gdb 6.3

(gdb) watch *0x00196f34
Watchpoint 1: *0x00196f34
(gdb) info breakpoints 
Num     Type           Disp Enb Address    What
1       watchpoint     keep y              *0x00196f34

对于 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,所以有什么线索吗?

布鲁诺·贝拉斯科

4

0 回答 0