2010-03-31 13 views
4

我有一個很少發生的錯誤,但崩潰了我的C++程序。似乎我有一個緩衝區溢出問題或類似的東西。我發現這些類型的錯誤是最難診斷的。如何記錄何時寫入特定內存位置以及使用哪個函數?

我的程序總是崩潰,因爲內存位置相同。是否有一些調試工具可以檢測何時寫入特定的內存位置並記錄執行該功能的功能?

我使用Visual Leak Detector(VLD)進行內存泄漏檢測,效果很好。它會替換它自己的原始malloc並記錄每個分配。我想知道是否有類似的記憶?

我知道這樣的事會削弱一個程序,但它可能是非常有幫助的。

我使用Visual Studio 2008的

+0

@Matthieu :(關於編輯註釋)gcc和gdb在Windows,BSD和OS X上也很棒! :) – 2010-03-31 14:55:23

+0

但是,如果使用不同的編譯器,不會有內存損壞問題的風險不同。我一直認爲gdb需要用gcc編譯程序:/ – 2010-03-31 15:00:55

+0

@Matthiew:實際上,大部分是(但真正的要求是必須能夠讀取調試符號格式,如果你想使用這些)。我並不是建議rusbi應該接受gdb的答案,但它仍然有用,因爲那些不使用VS的人會發現它有用,當他們發現這個問題時。評論是一個友好的jibe,因爲你暗示gcc只能在Linux上運行。 – 2010-03-31 15:21:18

回答

3

如果您使用Visual C++,然後查找data breakpoints

+0

我剛剛發現它,但是非常感謝! 在發佈... – rusbi 2010-03-31 14:38:17

2

很多調試器可以觀看特定的存儲位置,每當該位置的內容改變打破。不知道你的特定工具鏈,但gdb當然支持這一點。

+0

gdb的腳本可以在這裏特別派上用場。 – 2010-03-31 14:24:53

+0

我正在使用VS 2008進行此項目。 – rusbi 2010-03-31 14:28:34

0

Valgrind是一個工具,可以檢測到這樣的問題。它是免費的,開源的,易於使用。

+0

...和Linux/Darwin之前,應該先搜索一下。 – unwind 2010-03-31 14:31:35

+0

我想我聽說過這個,但我使用Windows ... – rusbi 2010-03-31 14:40:39

+0

大鼠。對於那個很抱歉。 – Beta 2010-03-31 15:09:02

相關問題