你怎么把一个断点在dbx中的存储位置?
-
20-08-2019 - |
题
一个同事具有可预测的方式失败,因为一些损坏存储器中的C程序。他想用dbx
监视内存位置,一旦它以查明导致腐败代码的分配。
这是可能的?如果是的话什么是腐败的时刻?
产生断点语法如果不是,这将是一个很好的方法来解决这个问题排序的?
(我通常的策略是看源控制,看看有什么我最近变了,因为这通常是原因,但有问题的代码听起来好像只过靠运气的工作,这样就不会。工作还,我已经消除自己是一个被从未与代码工作的罪魁祸首; - )
解决方案
说完看着越深,它出现在最新版本dbx
的解决办法是这样的:
stop access w <address>, <size>
由于<address>
和<size>
可以是表达式,可以写等命令:
stop access w &p, sizeof(int)
此假定p
是一个指针,我们要监视它指向的第一个字。
我也穿过细教程上运行跟踪和跺脚内存错误。它使用gdb
而非dbx
,但原则应该是相同的。
其他提示
在AIX上,要使用stophwp:
(dbx) help stophwp
stophwp <address> <size>
Stop execution when the contents of the specified
memory region change. This is a accomplished in
hardware and may not be available on all models.
我没有的Solaris开发,但你可以使用gdb和硬件断点做到这一点。
不隶属于 StackOverflow