【发布时间】:2011-06-28 18:47:16
【问题描述】:
我在内存中有一个特定位置正在损坏,我希望能够准确地看到写入该位置的内容。有什么方法可以让 gdb 中断对该特定地址的内存访问?
【问题讨论】:
我在内存中有一个特定位置正在损坏,我希望能够准确地看到写入该位置的内容。有什么方法可以让 gdb 中断对该特定地址的内存访问?
【问题讨论】:
是的。
使用 Watchpoints:
watch - 仅在写入时中断(并且仅在值更改时)
rwatch - 在读取时中断,和
awatch - 读/写中断。
来自一些互联网资源的更详细的简介:
观看
watch 是 gdb 设置数据断点的方式,如果指定位置的内存发生变化,它将停止程序的执行。
可以在变量名或任何地址位置设置观察断点。
watch my_variable
watch *0x12345678
where 0x12345678 is a valid address.
rwatch
rwatch (read-watch) 断点会在程序尝试从变量或内存位置读取时中断代码的执行。
rwatch iWasAccessed
rwatch *0x12345678
where 0x12345678 is a valid address.
手表
如果变量或内存位置被写入或读取,awatch 或访问手表会中断程序的执行。总之,awatches 是手表和 rwatches 合二为一。创建一个断点比创建两个单独的断点更方便。
awatch *0x12345678
where 0x12345678 is a valid address.
【讨论】:
× 代替 x...
awatch时有何不同?