我在内存中有一个特定的位置被破坏了,我希望能够确切地看到事情写入该位置的时间。有没有什么办法可以让gdb在对特定地址的内存访问中断?
答案 0 :(得分:46)
是强>
使用观察点:
观看 - 仅在写入时中断(并且仅在值更改时)
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 强>
如果写入或读取变量或内存位置,则awatch或access watch会中断程序的执行。总之,awatches是手表和rwatches一体化。创建一个断点比两个独立的断点更方便。
awatch *0x12345678
where 0x12345678 is a valid address.