【Visual Leak Detector】Release 模式下使用 VLD

这篇具有很好参考价值的文章主要介绍了【Visual Leak Detector】Release 模式下使用 VLD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍如何在 Release 模式下使用 VLD。同系列文章目录可见 《内存泄漏检测工具》目录

目录
  • 说明
  • 1. 思路概述
  • 2. 在 QT 中实践

1. 思路概述

要在 RELEASE 模式下使用 VLD,必须在包含头文件 vld.h 前预先定义 VLD_FORCE_ENABLE 宏(参考 VLD Issues 46):

#define VLD_FORCE_ENABLE
#include "vld.h"

DEBUG 模式一样,可以在代码中使用 VLDGlobalEnableVLDReportLeaksVLDGlobalDisable 等 VLD 库提供的 API,也可以通过提前更改 vld.ini 配置文件,实现对 VLD 功能的定制。API 使用方法可查看 vld.h 头文件或本人同系列文章。

2. 在 QT 中实践

本次测试使用的环境为:QT 5.9.2MSVC 2015 32bitRelease 模式,VLD 版本为 2.5.1,VLD 配置文件不做任何更改使用默认配置,测试工程所在路径为:E:\Cworkspace\Qt 5.9\QtDemo\testVLD。测试代码如下:

#include <QCoreApplication>

#define VLD_FORCE_ENABLE
#include "vld.h"

void testFun(int i)
{
    int *ptr = new int(i);
    printf("ptr = %08x, *ptr = %08x.\n", ptr, *ptr);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    testFun(1);

    return a.exec();
}

运行结束后,标准输出窗中输出以下结果:

ptr = 00e48270, *ptr = 00000001.

程序运行结束后,输出以下报告:

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00E48270: 4 bytes ----------
  Leak Hash: 0xBE4F898C, Count: 1, Total 4 bytes
  Call Stack (TID 37180):
    ucrtbase.dll!malloc()
    testVLD.exe!0x00A510FA()
    testVLD.exe!0x00A51059()
    testVLD.exe!0x00A512C6()
    KERNEL32.DLL!BaseThreadInitThunk() + 0x19 bytes
    ntdll.dll!RtlGetAppContainerNamedObjectPath() + 0x11E bytes
    ntdll.dll!RtlGetAppContainerNamedObjectPath() + 0xEE bytes
  Data:
    01 00 00 00                                                  ........ ........


Visual Leak Detector detected 1 memory leak (4 bytes).
Largest number used: 4 bytes.
Total allocations: 4 bytes.
Visual Leak Detector is now exiting.

为了与 DEBUG 模式下的输出做比较,切换为 DEBUG 模式后的输出报告如下:

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x01123E48: 4 bytes ----------
  Leak Hash: 0x57574D54, Count: 1, Total 4 bytes
  Call Stack (TID 28696):
    ucrtbased.dll!malloc()
    f:\dd\vctools\crt\vcstartup\src\heap\new_scalar.cpp (19): testVLD.exe!operator new() + 0x9 bytes
    e:\cworkspace\qt 5.9\qtdemo\testvld\main.cpp (8): testVLD.exe!testFun() + 0x7 bytes
    e:\cworkspace\qt 5.9\qtdemo\testvld\main.cpp (16): testVLD.exe!main() + 0x7 bytes
    f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (74): testVLD.exe!invoke_main() + 0x1B bytes
    f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (264): testVLD.exe!__scrt_common_main_seh() + 0x5 bytes
    f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (309): testVLD.exe!__scrt_common_main()
    f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp (17): testVLD.exe!mainCRTStartup()
    KERNEL32.DLL!BaseThreadInitThunk() + 0x19 bytes
    ntdll.dll!RtlGetAppContainerNamedObjectPath() + 0x11E bytes
    ntdll.dll!RtlGetAppContainerNamedObjectPath() + 0xEE bytes
  Data:
    01 00 00 00                                                  ........ ........


Visual Leak Detector detected 1 memory leak (40 bytes).
Largest number used: 40 bytes.
Total allocations: 40 bytes.
Visual Leak Detector is now exiting.

比较可知,RELEASE 模式下的报告,调用堆栈信息不够详细,且泄漏总内存中没有用于内存管理的额外 36 bytes文章来源地址https://www.toymoban.com/news/detail-411660.html

到了这里,关于【Visual Leak Detector】Release 模式下使用 VLD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Visual Leak Detector】在 VS 2015 中使用 VLD

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 使用前的准备 2. 在 VS 2015 中使用 VLD 2.1 无内存泄漏时的输出报告 2.2 有内存泄漏时的输出报告 3. 无法正常使用的可能原因 参考本人另一篇博客 安装 Visual

    2023年04月15日
    浏览(31)
  • 【Visual Leak Detector】在 VS 高版本中使用 VLD

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。 本篇介绍如何在 VS 高版本中使用 vld2.5.1 。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 使用前的准备 2. 在 VS 2015 及更早版本中使用 VLD 3. 在 VS 高版本中使用 VLD 3.1 参考资料:在 VS 2017 中使用 VLD 3.2 参考

    2024年02月02日
    浏览(27)
  • 【Visual Leak Detector】源码文件概览

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 源码包中的各文件用途做个概述。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 整体概览 2. 文件夹 .teamcity 3 文件夹 lib 3.1 文件夹 cppformat(生成 libformat) 3.2 文件夹 dbghelp 3.3 文件夹 gtest(生成

    2023年04月22日
    浏览(40)
  • 【Visual Leak Detector】源码下载

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的下载。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 下载途径 2. 不同下载途径的源文件差异 以 v2.5.1 版本为例,可以到 Github-KindDragon-vld 页面下载 master 的 zip 源码包,如下所示: 也可

    2023年04月20日
    浏览(46)
  • 【Visual Leak Detector】源码编译 VLD 库

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的编译。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. VLD 库的依赖文件 2. 源码编译生成 VLD 库 3. 配置环境变量 4. 使用 VLD 库 以 vld2.5.1 版本为例,下载源码 后,源码包中各文件的用途可

    2023年04月24日
    浏览(58)
  • 【Visual Leak Detector】源码调试 VLD 库

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 源码的调试。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. VLD 库源码调试步骤 1.1 设置为启动项目 1.2 设置调试程序 1.3 设置输出目录 1.4 拷贝 vld 依赖文件 1.5 加断点调试 2. 注意事项 以 vld

    2024年02月03日
    浏览(28)
  • 【Visual Leak Detector】VS 中 VLD 输出解析

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 使用方式 2. 输出报告 在 VS 中使用 VLD 的方法可以查看另外一篇博客:在 VS 2015 中使用 VLD。 在 VS 中使用 VLD 时的输出报告,与在 QT 中使用时是一致的,输出

    2023年04月15日
    浏览(34)
  • 【Visual Leak Detector】核心源码剖析(VLD 1.0)

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 1.0 源码做内存泄漏检测的思路进行剖析。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 源码获取 2. 源码文件概览 3. 源码剖析 3.1 注册自定义 AllocHook 函数 3.2 使用 StackWalk64 获取调用堆栈信息

    2024年02月01日
    浏览(24)
  • 【Visual Leak Detector】核心源码剖析(VLD 2.5.1)

    使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇对 VLD 2.5.1 源码做内存泄漏检测的思路进行剖析。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 源码获取 2. 源码文件概览 3. 源码剖析 3.1 通过 inline hook 修补 LdrpCallInitRoutine 3.2 通过 IAT hook 替换内存操

    2024年02月03日
    浏览(29)
  • Visual Studio在Release模式下设置代码的调试

    Debug 模式下模型的加载速度、打开速度会降低很多,这里不推荐使用 Debug 模式进行调试。 Release 模式下可进行调试,使用 Release 模式调试,会提高模型打开速度、 加载速度、编译速度,默认的 release 版本不能进行调试,需要设置项目属性。 右键打开项目属性,切换配置至对

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包