2013-08-07 53 views
1

任何人都可以指導我一個合適的工具來調試C程序?它不是一個簡單的項目,也是一個大項目的一部分。問題是我有一個結構數組,它被正確初始化。我可以使用gdb檢查值。程序運行後,數組內容正在被覆蓋。我不確定哪個進程覆蓋了這個結構數組的內容。 gdb中的任何工具甚至技術都可以跟蹤這個問題?不能從gdb做觀察點,因爲它不能看「恆定值」。嘗試valgrind,但沒有顯示任何與內存相關的問題。任何幫助,真的很感激。謝謝,巴德里。工具檢測內存(結構數組)覆蓋寫入

+0

看看IBM/Rational的[PurifyPlus](http://www.ibm.com/developerworks/rational/library/07/0306_chitale/)我很久以前就用過了,它很棒。 –

+0

如果代碼寫入一個'const'聲明的變量或者意圖將一個非const'賦予非'const',那麼應該得到一個編譯器警告,至少所有的警告都是:'-Wall -Wextra -pedantic' – alk

+0

是內存對於堆棧中的結構數組,即自動變量,或堆,即通過malloc獲得的內存?另外,你在使用什麼環境,Windows或Linux/BSD? –

回答

0

在GDB中,總是可以看到一些地址。如果你能在gdb得到的東西地址:

p &somecomplexthing 

,它是回答你0x123456可以隨時

watch *(void**)0x123456 

(或使用任何指針到指針類型是適合你)

當心ASLR;您可能想要禁用它

(可能以echo 0 > /proc/sys/kernel/randomize_va_space作爲根運行)。

此外,最近的GCC 4.8爲您提供address sanitizer-fsanitize=address;並且不要忘記GCC的-Wall -g標誌。