vld是開源的,遵循lgpl協議(
一、vld的能力
1、對於每乙個洩漏塊都提供包含檔名、行數等資訊的全部堆疊(需要pdb支援)
2、可以發現包括com和windows堆在內的絕大部分程序內(in-process)記憶體洩漏
3、可以排除檢查指定的模組甚至exe本身
4、支援以十六進製制和ascii形式轉儲洩漏塊的全部資料
5、可以自定義記憶體洩漏報告,包括形式和方式
二、如何使用vld
在正式使用vld之前,必須設定vc++的include和library查詢路徑( tools ->options -> projects and solutions-> vc++ directories),要在程式中使用vld:
1、 需要有至少乙個c/c++檔案包含 vld.h
2、 若程式包含多個dll,則每個dll都需要有至少乙個c/c++檔案包含 vld.h
3、 使用debug選項編譯
若程式由vc++除錯啟動,則程序退出時vld會在輸出視窗顯示記憶體洩漏報告,雙擊報告內的棧,可以跳轉到相應的原始碼檔案。
三、一些有用的選項
vld提供了一些配置項,可以通過vld.ini設定,預設情況將使用安裝目錄下的vld.ini,也可以將vld.ini拷貝到程式執行目錄,這樣僅當執行該程式時生效。
maxtraceframes:輸出的堆疊級數限制
aggregateduplicates:若為"yes",則只在報告中輸出特定洩漏位置的第一次洩漏
maxdatadump:轉儲資料大小限制
reportto:記憶體洩漏報告的輸出形式,可以使用"debugger"、 "file"或者 "both"
reportfile:記憶體洩漏報告的檔名,預設"memoryleakreport.txt"
四、vld實現原理
vld通過修改iat表將crt的呼叫替換為自己的實現,並記錄分配時的呼叫堆疊,相比通過巨集替換new/delete、malloc/free,具有以下好處:
1、無需編譯時對每個c/c++檔案都包含指定標頭檔案
2、可以執行時控制記憶體洩漏檢查策略
3、具有很好的擴充套件性,例如支援vc11引入的_aligned_malloc
以上思路可用於檢查其他洩漏,例如使用者物件洩漏、gdi洩漏、控制代碼洩漏等
VLD記憶體洩漏工具的使用
靈活自由是c 的一大特性,但也有弊端。c c 程式越複雜,記憶體的管理顯得越重要,稍有不慎就會出現洩漏。如果記憶體洩漏不是很嚴重,在短時間內對程式不會有太大影響,這也使得記憶體洩漏問題有很強的隱蔽性,不易被發現。然而不管記憶體洩漏多麼輕微,當程式長時間執行時,其破壞力是驚人的 從效能下降到記憶體耗盡...
VLD 記憶體洩漏檢查工具
1.安裝vld 2.5.1 2.配置依賴庫,工程新增路徑。additional include directories soup visual leak detector include additional depandencies soup visual leak detector lib wi...
qt記憶體洩漏檢測 VLD記憶體洩漏檢測工具
vld記憶體工具可以為每個洩漏的塊提供完整的堆疊跟蹤,包括原始檔和行號資訊,從而快速找到記憶體洩漏點。注 僅支援windows平台。在main.cpp中新增 include後以除錯模式執行即可檢測記憶體洩漏。include int main int argc,char ar main.cpp 5 l...