【Visual Leak Detector】原始碼偵錯 VLD 庫

2023-05-07 15:00:32

說明

使用 VLD 記憶體漏失檢測工具輔助開發時整理的學習筆記。本篇介紹 VLD 原始碼的偵錯。同系列文章目錄可見 《記憶體漏失檢測工具》目錄


1. VLD 庫原始碼偵錯步驟

vld2.5.1 版本為例,下載原始碼 後,原始碼包中各檔案的用途可看本人另一篇部落格 【VLD】原始碼檔案概覽。使用 VLD 進行洩漏檢測時,有時候會出現突然崩潰、退出時沒有列印以下提示資訊等情況,此時就可以偵錯一下 VLD 的原始碼,查一查是哪裡出了問題。

Visual Leak Detector is now exiting.

與其他 DLL 的偵錯方法一樣,VLD 原始碼偵錯遵循以下步驟(參考 MSDN - how-to-debug-from-a-dll-project)。

1.1 設定為啟動專案

使用 VS2015 開啟 vld_vs14.sln,將 vld 設定為啟動專案。

1.2 設定偵錯程式

進入 vld 屬性頁 -> 設定屬性 -> 偵錯 頁面。選擇 Debug 模式,選擇 本地 Windows 偵錯程式,根據自己需求設定偵錯程式與偵錯程式的啟動引數。點選確定。

這個 命令 就是指呼叫 vld.dll 的程式(被稱為偵錯程式)所在路徑,我的是 E:\Cworkspace\VSDemo\testVLD\Debug\testVLD.exe,如果這個偵錯程式需要額外的引數,就把引數填寫在下一行 命令引數 中,沒有引數空著就好。

1.3 設定輸出目錄

進入 vld 屬性頁 -> 設定屬性 -> 常規 頁面。選擇 Debug 模式,根據自己需求設定輸出目錄。點選確定。

設定為偵錯程式的同一級目錄,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,由於 vld_vs14.sln 的路徑為 E:\Cworkspace\VSDemo\vld-master,因此這裡顯示為相對路徑。

1.4 拷貝 vld 依賴檔案

vld 安裝目錄中的 dbghelp.dllMicrosoft.DTfW.DHL.manifest 這兩個檔案拷貝至偵錯程式的同一級目錄,我的是 E:\Cworkspace\VSDemo\testVLD\Debug,要注意是 Win32 還是 x64,拷對應的才行。

1.5 加斷點偵錯

至此,就可以開始偵錯了,不妨在 VisualLeakDetector 類別建構函式中加一個斷點,點選 本地 Windows 偵錯程式 開始偵錯(或者按 F5),程式成功停在了斷點處。

2. 注意事項

偵錯時,有以下幾點需注意:

  • vld 原始碼生成的 vld.dll 與偵錯程式所參照的 vld.dll 必須是同一路徑下的同一個檔案,這也是要重新設定 vld 輸出目錄的原因。為確保偵錯程式執行時能正確找到 vld 生成的 dll,可以將 vld 輸出目錄設定為偵錯程式所在目錄,或者Path 環境變數的某個目錄(例如 vld 安裝目錄的 bin 子目錄下)
  • vld 的依賴檔案 dbghelp.dllMicrosoft.DTfW.DHL.manifest 也應該放在偵錯程式能找到的地方。
  • 平臺位數必須一致,Win32 時都必須得是 Win32x64 時都必須得是 x64
  • 偵錯程式必須能找到它所依賴的其他環境(比如 xx.dll)。特別是 QT 開發的偵錯程式,其依賴的 Qt DLL 比較多,直接執行時會提示缺失某某 DLL
  • 偵錯程式與 DLL 都必須是 Debug 版本。