使用 VLD 記憶體漏失檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 原始碼的偵錯。同系列文章目錄可見 《記憶體漏失檢測工具》目錄
以 vld2.5.1
版本為例,下載原始碼 後,原始碼包中各檔案的用途可看本人另一篇部落格 【VLD】原始碼檔案概覽。使用 VLD
進行洩漏檢測時,有時候會出現突然崩潰、退出時沒有列印以下提示資訊等情況,此時就可以偵錯一下 VLD
的原始碼,查一查是哪裡出了問題。
Visual Leak Detector is now exiting.
與其他 DLL
的偵錯方法一樣,VLD
原始碼偵錯遵循以下步驟(參考 MSDN - how-to-debug-from-a-dll-project)。
使用 VS2015
開啟 vld_vs14.sln
,將 vld
設定為啟動專案。
進入 vld 屬性頁 -> 設定屬性 -> 偵錯 頁面。選擇 Debug
模式,選擇 本地 Windows 偵錯程式,根據自己需求設定偵錯程式與偵錯程式的啟動引數。點選確定。
這個 命令 就是指呼叫 vld.dll
的程式(被稱為偵錯程式)所在路徑,我的是 E:\Cworkspace\VSDemo\testVLD\Debug\testVLD.exe
,如果這個偵錯程式需要額外的引數,就把引數填寫在下一行 命令引數 中,沒有引數空著就好。
進入 vld 屬性頁 -> 設定屬性 -> 常規 頁面。選擇 Debug
模式,根據自己需求設定輸出目錄。點選確定。
設定為偵錯程式的同一級目錄,我的是 E:\Cworkspace\VSDemo\testVLD\Debug
,由於 vld_vs14.sln
的路徑為 E:\Cworkspace\VSDemo\vld-master
,因此這裡顯示為相對路徑。
將 vld
安裝目錄中的 dbghelp.dll
與 Microsoft.DTfW.DHL.manifest
這兩個檔案拷貝至偵錯程式的同一級目錄,我的是 E:\Cworkspace\VSDemo\testVLD\Debug
,要注意是 Win32
還是 x64
,拷對應的才行。
至此,就可以開始偵錯了,不妨在 VisualLeakDetector
類別建構函式中加一個斷點,點選 本地 Windows 偵錯程式 開始偵錯(或者按 F5
),程式成功停在了斷點處。
偵錯時,有以下幾點需注意:
vld
原始碼生成的 vld.dll
與偵錯程式所參照的 vld.dll
必須是同一路徑下的同一個檔案,這也是要重新設定 vld
輸出目錄的原因。為確保偵錯程式執行時能正確找到 vld
生成的 dll
,可以將 vld
輸出目錄設定為偵錯程式所在目錄,或者為 Path
環境變數的某個目錄(例如 vld 安裝目錄的 bin 子目錄下)。vld
的依賴檔案 dbghelp.dll
與 Microsoft.DTfW.DHL.manifest
也應該放在偵錯程式能找到的地方。Win32
時都必須得是 Win32
,x64
時都必須得是 x64
。xx.dll
)。特別是 QT 開發的偵錯程式,其依賴的 Qt DLL
比較多,直接執行時會提示缺失某某 DLL
。DLL
都必須是 Debug
版本。本文作者:木三百川
本文連結:https://www.cnblogs.com/young520/p/17379196.html
版權宣告:本文系博主原創文章,著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請附上出處連結。遵循 署名-非商業性使用-相同方式共用 4.0 國際版 (CC BY-NC-SA 4.0) 版權協定。