2

一位同事的 C 程序由于某些损坏的内存而以可预测的方式失败。他想dbx在分配内存位置后使用它来监视内存位置,以查明导致损坏的代码。

这可能吗?如果是这样,在损坏时产生断点的语法是什么?

如果没有,解决此类问题的好方法是什么?

(我通常的策略是查看源代码管理以查看我最近所做的更改,因为这通常是原因。但是有问题的代码听起来好像它只是靠运气才能工作,所以那是行不通的。还有,由于从未使用过代码,我已经将自己作为罪魁祸首消除了。;-)

4

3 回答 3

4

经过更深入的研究,最近版本的解决方案似乎dbx是这样的:

stop access w <address>, <size>

由于<address>and<size>可以是表达式,您可以编写如下命令:

stop access w &p, sizeof(int)

这假设p是一个指针,我们要监视它指向的第一个单词。

我还遇到了一个关于跟踪和踩踏内存错误的优秀教程。它使用gdb而不是dbx,但原理应该相同。

于 2008-12-10T00:22:47.723 回答
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.
于 2016-03-18T22:07:15.937 回答
0

我不是 Solaris 开发人员,但您可以使用 gdb 和硬件断点来执行此操作

于 2008-12-08T22:03:20.110 回答