【问题标题】:How do you put a breakpoint on a memory location in dbx?如何在 dbx 中的内存位置设置断点?
【发布时间】:2008-12-08 21:48:45
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c debugging memory-leaks solaris dbx


【解决方案1】:

经过更深入的研究,dbx 最新版本的解决方案似乎类似于:

stop access w <address>, <size>

由于&lt;address&gt;&lt;size&gt; 可以是表达式,因此您可以编写如下命令:

stop access w &p, sizeof(int)

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

我还遇到过很好的tutorial 跟踪和消除内存错误。它使用gdb而不是dbx,但原理应该是一样的。

【讨论】:

  • 您可能想要使用:stop access wb &amp;p, sizeof(int) 让 dbx 在内存写入之前停止
【解决方案2】:

在 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.

【讨论】:

    【解决方案3】:

    我不是 Solaris 开发人员,但您可以使用 gdb 和硬件断点来做到这一点

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多