如何使用gdb来监视整个内存区域的任何变化?

时间:2011-07-20 15:35:43

标签: gdb breakpoints

例如,我可以在<startaddress><endaddress>的地址范围内对内存进行任何更改吗? 读取和/或写入怎么样?

1 个答案:

答案 0 :(得分:2)

在Linux / x86上,GDB使用处理器调试寄存器来实现硬件观察点。这样的观察点很快 - 程序以全速运行,直到处理器停止并在触发访问或写入观察点时向应用程序发出信号。

但是这样的观察点只适用于1字大小的数据。

最近的Valgrind版本(SVN,但没有发布的版本)实现了GDB远程协议存根,并允许您通过特殊的监视器命令在任意内存上设置读取或写入观察点。

因此,如果您使用的是具有Valgrind的平台,并且如果您的应用程序在Valgrind下运行速度可以接受,那么是:您可以在任意内存区域设置观察点。

相关问题