日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt5使用内存检测工具vld查看内存泄漏

發布時間:2023/12/3 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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查看内存泄漏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。