由于内存损坏,同事有一个C程序以可预测的方式失败。他希望在分配内存位置后使用dbx
监视内存位置,以便查明导致损坏的代码。
这可能吗?如果是这样,在腐败时产生断点的语法是什么?
如果没有,那么解决这类问题的好方法是什么?
(我通常的策略是查看源代码控制,看看我最近发生了什么变化,因为这通常是原因。但是有问题的代码听起来似乎只是运气好,所以不会另外,我已经把自己作为罪魁祸首从未使用过代码。@ -
答案 0 :(得分:4)
看起来更深入,似乎dbx
的最新版本的解决方案类似于:
stop access w <address>, <size>
由于<address>
和<size>
可以是表达式,因此您可以编写如下命令:
stop access w &p, sizeof(int)
这假设p
是一个指针,我们希望监控它指向的第一个单词。
我在追踪和踩踏内存错误时遇到了很好的tutorial。它使用gdb
而不是dbx
,但原则应该相同。
答案 1 :(得分:1)
在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.
答案 2 :(得分:0)
我不是Solaris开发人员,但你可以使用gdb和硬件断点来实现这一点