我可以在读/写地址时使用gdb中断吗

Can I have gdb break on read/write from an address?

本文关键字:gdb 中断 地址 我可以      更新时间:2023-10-16

可能重复:
我可以在';内存访问';在GDB?

我在内存中有一个特定的位置正在被破坏,我希望能够准确地看到东西何时写入该位置。有没有什么方法可以让gdb中断对该特定地址的内存访问?


使用监视点
观察-仅在写入时中断(并且仅当值发生更改时)
rwatch-读取时中断,并且
awatch-读/写时中断。

来自一些互联网来源的更详细的简报:

观看
watch是gdb设置数据断点的方法,如果指定位置的内存发生变化,数据断点将停止程序的执行。

监视断点可以在变量名或任何地址位置上设置。

watch my_variable
watch *0x12345678
where 0x12345678 is a valid address.

rwatch
当程序试图从变量或内存位置读取时,rwatch(readwatch)断点会中断代码的执行。

rwatch iWasAccessed
rwatch *0x12345678
where 0x12345678 is a valid address.

awatch
如果变量或内存位置被写入或读取,awatch或access监视会中断程序的执行。总之,awatches就是手表和rwatches合为一体。这是一种创建一个断点而不是两个单独断点的方便方法。

awatch *0x12345678
where 0x12345678 is a valid address.