一位同事的 C 程序由于某些损坏的内存而以可预测的方式失败。他想dbx
在分配内存位置后使用它来监视内存位置,以查明导致损坏的代码。
这可能吗?如果是这样,在损坏时产生断点的语法是什么?
如果没有,解决此类问题的好方法是什么?
(我通常的策略是查看源代码管理以查看我最近所做的更改,因为这通常是原因。但是有问题的代码听起来好像它只是靠运气才能工作,所以那是行不通的。还有,由于从未使用过代码,我已经将自己作为罪魁祸首消除了。;-)
一位同事的 C 程序由于某些损坏的内存而以可预测的方式失败。他想dbx
在分配内存位置后使用它来监视内存位置,以查明导致损坏的代码。
这可能吗?如果是这样,在损坏时产生断点的语法是什么?
如果没有,解决此类问题的好方法是什么?
(我通常的策略是查看源代码管理以查看我最近所做的更改,因为这通常是原因。但是有问题的代码听起来好像它只是靠运气才能工作,所以那是行不通的。还有,由于从未使用过代码,我已经将自己作为罪魁祸首消除了。;-)
经过更深入的研究,最近版本的解决方案似乎dbx
是这样的:
stop access w <address>, <size>
由于<address>
and<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 和硬件断点来执行此操作