2008-12-08 59 views
2

同事有一個C程序,由於內存損壞而導致可預測的失敗。他希望使用dbx來監視內存位置,以便查明導致損壞的代碼。如何在dbx中的內存位置放置斷點?

這可能嗎?如果是這樣的話,在腐敗時刻產生斷點的語法是什麼?

如果沒有,那麼解決這類問題的好方法是什麼? (我通常的策略是看看源代碼控件,看看我最近改變了什麼,因爲這通常是原因,但是這些代碼聽起來好像只是運氣好,所以贏了'將不起作用。而且,我已經通過從未與代碼工作消除自己的罪魁禍首。;-)

+0

你可以嘗試用電子圍欄https://en.wikipedia.org/wiki/Electric_Fence聯 – 2016-03-19 06:09:22

回答

4

經過更深入的觀察,似乎dbx最近版本的解決方案如下所示:

stop access w <address>, <size> 

由於<address><size>可以是表達式,你可以寫類似這樣的命令:

stop access w &p, sizeof(int) 

這是假定p是一個指針,我們要監視它指向的第一個字。

我也跑過罰款tutorial跟蹤和跺腳內存錯誤。它使用gdb而不是dbx,但原則應該是相同的。

+1

您可能需要使用: `停止訪問wb&p,sizeof(int)` 以在寫入內存之前讓dbx停止 – 2012-08-08 08:59:10

0

我沒有的Solaris開發,但你可以用gdb做到這一點,硬件斷點

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. 
相關問題