2010-10-29 112 views
0

我的程序試圖加載一些DLL。這個問題在第一次加載時不會出現。但它每7次都會發生。我猜是有內存腐敗。有沒有一種工具或東西來調試visual C++的內存損壞。我嘗試了一些內存泄漏工具,但沒有內存泄漏。DLL加載時出錯

請幫忙!!!

問候, 蘇雷什

回答

1

我寫了一篇博客,通過一些步驟,你可以用它來找到內存損壞去。真正有幫助的是gflags(#2)。

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/02/06/6-_2200_Pointers_2200_-on-Debugging-Unmanaged-Code.aspx

使用Windows調試工具:如果你沒有這個,現在去得到它。對於一些嚴重的調試,你會得到windbg,我將很快寫一篇博客。但是,我最常使用的工具是GFLAGS。其中最有用的功能之一是能夠在自己的頁面上進行每個堆分配(+ hpa)。這意味着您可以在初始解除引用的位置檢測到內存越界錯誤,而不是稍後當您最終在重要的東西上塗寫時。

此選項使您的進程使用更多的內存,並且速度明顯較慢。我建議在命令提示符下運行此行後,在調試器中運行整個單元測試套件(如果您使用的是NUnit gui測試運行器)。

gflags -i nunit-gui.exe +hpa 

將nunit-gui.exe替換爲測試運行器.exe的名稱。 (請記住在完成-hpa時將其關閉)。更多關於GFLAGS。

WinDBG對於追蹤非託管內存泄漏非常重要。你也可以看看AutomatedQA的這些工具,這些工具的使用更易於使用 - 但我仍然認爲值得學習WinDBG。

0

首先要嘗試的是使用其Debug配置從Visual Studio IDE編譯和運行該程序。這使得一些堆檢查和其他可能立即顯示錯誤的選項成爲可能。

確保您正在編譯所有警告(/W4),並且您既不會忽略它們,也不會添加轉換以使它們消失。如果你聽它,編譯器是一個好朋友。

因爲它不會每次都發生,所以這可能是與時間有關的,或者是一個未初始化的變量,通常會以某種功能上的OK值浮動。