我可以从地址读取/写入gdb中断吗?

时间:2011-06-28 18:47:17

标签: c++ c debugging gdb

  

可能重复:
  Can I set a breakpoint on 'memory access' in GDB?

我在内存中有一个特定的位置被破坏了,我希望能够确切地看到事情写入该位置的时间。有没有什么办法可以让gdb在对特定地址的内存访问中断?

1 个答案:

答案 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.