qt5使用内存检测工具vld查看内存泄漏
什么是vld?
Visual Leak Detector是一款用于Visual C++的免費的內存泄露檢測工具。相比較其它的內存泄露檢測工具,它在檢測到內存泄漏的同時,還具有如下特點:
1、 可以得到內存泄漏點的調用堆棧,如果可以的話,還可以得到其所在文件及行號;
2、 可以得到泄露內存的完整數據;
3、 可以設置內存泄露報告的級別;
4、 它是一個已經打包的lib,使用時無須編譯它的源代碼。而對于使用者自己的代碼,也只需要做很小的改動;
5、 他的源代碼使用GNU許可發布,并有詳盡的文檔及注釋。對于想深入了解堆內存管理的讀者,是一個不錯的選擇。
從使用角度來講,Visual Leak Detector簡單易用,對于使用者自己的代碼,唯一的修改是#include Visual Leak Detector的頭文件后正常運行自己的程序,就可以發現內存問題。從研究的角度來講,如果深入Visual Leak Detector源代碼,可以學習到堆內存分配與釋放的原理、內存泄漏檢測的原理及內存操作的常用技巧等。
qt5如何使用vld查看內存泄漏?
1、確保調試器使用的是MSVC2015 32而不是minGW 32.更改教程可查看鏈接:https://blog.csdn.net/youarenotme/article/details/107444429;
2、下載VLD,下載地址:https://kinddragon.github.io/vld/;
3、安裝VLD后,將“vld安裝目錄/include”下的vld.h和vld_def.h文件拷貝到Qt默認的include目錄下,將“vld安裝目錄/lib/Win64"(這里注意根據自己安裝的qt庫位數決定)下的vld.lib拷貝到Qt默認的lib目錄,就完成安裝了;
4、修改要測試項目的main.cpp文件,在main函數上面添加以下代碼:
include<vld.h>
5、在debug模式下(一定是運行而不是調試,否則無法查看到內存泄漏的具體代碼行,具體原因暫未查到)運行程序,確保要檢查的代碼塊被執行后,正常關閉程序;
6、在“應用程序輸出”窗口查看檢查結果。若結果中有“No memory leaks detected.”則表示無內存泄漏。
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泄漏、句柄泄漏等
總結
以上是生活随笔為你收集整理的qt5使用内存检测工具vld查看内存泄漏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++内存检测工具valgrind-
- 下一篇: linux内存测试工具memtest,内