同事有一個C程序,由於內存損壞而導致可預測的失敗。他希望使用dbx
來監視內存位置,以便查明導致損壞的代碼。如何在dbx中的內存位置放置斷點?
這可能嗎?如果是這樣的話,在腐敗時刻產生斷點的語法是什麼?
如果沒有,那麼解決這類問題的好方法是什麼? (我通常的策略是看看源代碼控件,看看我最近改變了什麼,因爲這通常是原因,但是這些代碼聽起來好像只是運氣好,所以贏了'將不起作用。而且,我已經通過從未與代碼工作消除自己的罪魁禍首。;-)
同事有一個C程序,由於內存損壞而導致可預測的失敗。他希望使用dbx
來監視內存位置,以便查明導致損壞的代碼。如何在dbx中的內存位置放置斷點?
這可能嗎?如果是這樣的話,在腐敗時刻產生斷點的語法是什麼?
如果沒有,那麼解決這類問題的好方法是什麼? (我通常的策略是看看源代碼控件,看看我最近改變了什麼,因爲這通常是原因,但是這些代碼聽起來好像只是運氣好,所以贏了'將不起作用。而且,我已經通過從未與代碼工作消除自己的罪魁禍首。;-)
經過更深入的觀察,似乎dbx
最近版本的解決方案如下所示:
stop access w <address>, <size>
由於<address>
和<size>
可以是表達式,你可以寫類似這樣的命令:
stop access w &p, sizeof(int)
這是假定p
是一個指針,我們要監視它指向的第一個字。
我也跑過罰款tutorial跟蹤和跺腳內存錯誤。它使用gdb
而不是dbx
,但原則應該是相同的。
您可能需要使用: `停止訪問wb&p,sizeof(int)` 以在寫入內存之前讓dbx停止 – 2012-08-08 08:59:10
我沒有的Solaris開發,但你可以用gdb做到這一點,硬件斷點
在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.
你可以嘗試用電子圍欄https://en.wikipedia.org/wiki/Electric_Fence聯 – 2016-03-19 06:09:22