我正在使用通过 MacPorts 为 Snow Leopard 编译的 GDB 7.1 调试二进制文件(仅限程序集)。我对使用find
gdb 命令找到的特定地址感兴趣。因此,它确实是一个有效的地址:
(gdb) printf "%s\n", 0x00196f34
bruno
(gdb)
问题是每当我为它设置一个观察点(watch *0x00196f34
)并且它被访问时,系统会立即崩溃并重新启动。
我注意到当时启用了硬件观察点,期望结果不那么严重,我切换到使用软件观察点set can-use-hw-watchpoints 0
,但这并没有解决问题。
我尝试使用gdb 6.3
Xcode 附带的版本,并且手表工作正常。在为 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,所以有什么线索吗?
布鲁诺·贝拉斯科