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

说明

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

1. 使用前的准备

参考本人另一篇博客 安装 Visual Leak Detector 下载 vld-2.5.1-setup.exe 并按步骤安装 VLD。注意配置环境的时候一定要把三个选项都打上勾,在一台电脑上配置完成后,用的时候十分方便,包含头文件就可以使用,不需添加任何多余的代码。

3. 在 VS 2015 中使用 VLD

在项目的 main.cpp 文件中,添加头文件:

#include <vld.h>

选择 x86 或者 x64 编译器,选择 Debug 模式,编译运行,就可以正常使用了。我的 VS 版本是 Microsoft Visual Studio Professional 2015,VLD 安装目录为 D:\Program Files (x86)\Visual Leak Detector

3.1 无内存泄漏时的输出报告

程序运行结束后,若没有检测到内存泄漏,VLD 会输出以下 4 行报告:

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
No memory leaks detected.
Visual Leak Detector is now exiting.

3.2 有内存泄漏时的输出报告

程序运行结束后,若检测到内存泄漏,VLD 会输出以下报告(本例中出现一处内存泄漏,使用 x86 编译器):

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 0x008D8980: 20 bytes ----------
  Leak Hash: 0xC3828EE7, Count: 1, Total 20 bytes
  Call Stack (TID 12948):
    f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (15): testVLD.exe!operator new[]() + 0x9 bytes
    e:\cworkspace\vsdemo\testvld\testvld\main.cpp (8): 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!__RtlUserThreadStart() + 0x2F bytes
    ntdll.dll!_RtlUserThreadStart() + 0x1B bytes
  Data:
    CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
    CD CD CD CD                                                  ........ ........


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

若使用的是 x64 编译器,报告输出如下:

Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
Visual Leak Detector Version 2.5.1 installed.
“testVLD.exe”(Win32): 已加载“C:\Windows\System32\kernel.appcore.dll”。已加载符号。
WARNING: Visual Leak Detector detected memory leaks!
---------- Block 1 at 0x00000000650C6AD0: 20 bytes ----------
  Leak Hash: 0x72624394, Count: 1, Total 20 bytes
  Call Stack (TID 12984):
    f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (16): testVLD.exe!operator new[]()
    e:\cworkspace\vsdemo\testvld\testvld\main.cpp (8): testVLD.exe!main() + 0xA bytes
    f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (75): testVLD.exe!invoke_main()
    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() + 0x14 bytes
    ntdll.dll!RtlUserThreadStart() + 0x21 bytes
  Data:
    CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
    CD CD CD CD                                                  ........ ........


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

4. 无法正常使用的可能原因

  • 检查是否是 Debug 模式,VLD 无法直接在 Release 模式下使用。
  • 检查环境变量是否正确配置,环境变量是 VLD 安装程序自动配置的,但是若在安装时没有勾选自动配置,会导致环境变量缺失,查看 Path 这一系统变量中是否添加了 VLD 的 bin 路径(我的是 D:\Program Files (x86)\Visual Leak Detector\bin\Win32D:\Program Files (x86)\Visual Leak Detector\bin\Win64 这两个)。
  • 在 VLD 安装成功后,是否已经重启了 VS,因为要加载 VLD 安装时新添的环境变量,若没重启 VS,可能找不到 VLD 的依赖环境。
  • 检查 includelib 目录是否被正确添加,这一步也是 VLD 安装程序自动进行的,打开项目属性页,点击 C/C++ -> 常规 -> 附加包含目录 查看是否添加了 VLD 的 include 目录(我的是 D:\Program Files (x86)\Visual Leak Detector\include),然后点击 链接器 -> 常规 -> 附加库目录 查看是否添加了 VLD 的 lib 目录(在我电脑上,使用 x86 编译器时是 D:\Program Files (x86)\Visual Leak Detector\lib\Win32,使用 x64 编译器时是 D:\Program Files (x86)\Visual Leak Detector\lib\Win64)。
  • 清除上一次的编译文件,重新编译运行一下。

原文链接:https://www.cnblogs.com/young520/p/17321794.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【Visual Leak Detector】在 VS 2015 中使用 VLD - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 【Visual Leak Detector】使用注意事项

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍使用 VLD 时的注意事项。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 官网文档 2. 注意事项 1. 官网文档 可以在 Using-Visual-Leak-Detector 官方文档里看到如何使用 VLD,里面介绍了如何在 Visual C++ 2003/2005/2…

    C++ 2023年4月17日
    00
  • 【Visual Leak Detector】配置项 ReportTo

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 ReportTo 的使用方法。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置报告输出的位置 2.1 测试代码 2.2 ReportTo = debugger 时的输出 2.3 ReportTo = file 时的输出…

    C++ 2023年4月18日
    00
  • 32位进程设置大地址(3G)空间

    对应32位应用,我们不做任何设置,我们能用的地址空间其实不足2G,有两种方式设置大地址空间: 一、设置链接选项 二、工具editbin 1.开启方法 (1)利用管理员身份运行”Visual Studio 工具命令提示”程序; (2)输入命令:editbin /LARGEADDRESSAWARE D:\xxx.exe 2.检查是否开启成功 (1)利用管理员身份…

    C++ 2023年5月6日
    00
  • linux开发之gdb记录

    简述 GDB, the GNU Project debugger, allows you to see what is going on ‘inside’ another program while it executes — or what another program was doing at the moment it crashed.GDB, G…

    C++ 2023年4月17日
    00
  • 第四部分:Spdlog日志库的核心组件分析-logger

    Spdlog是一个快速且可扩展的C++日志库,它支持多线程和异步日志记录。在本文中,我们将分析Spdlog日志库的核心代码,探究其实现原理和代码结构。 Spdlog的基本架构 上一篇文章介绍了spdlog的五个主要组件,其中最重要是Logger、Sink和Formatter其中,Logger负责日志的记录和管理,Sink负责将日志输出到不同的目标(比如控制台…

    C++ 2023年4月18日
    00
  • NX二次开发:Checkmate例子根据dfa文件检查模型数据

    NX中的checkmate功能是用于检查模型、图纸数据的工具,在UGOPEN中有例子。手动操作可以检查已加载的装配下所有零部件,可以设置通过后保存模型,检查结果保存到Teamcenter中,默认保存在零组件版本下。 代码中可以设置多个检查规则。相关设置可以在用户默认设置中进行设置。 1 //============================= 2 //…

    C++ 2023年4月18日
    00
  • 【Qt6】QWindow类可以做什么

    原来的水文标题是“用 VS Code 搞 Qt6”,想想还是直接改为“Qt6”,反正这个用不用 VS Code 也能搞。虽然我知道大伙伴们都很讨厌 CMake,但毕竟这厮几乎成了 C++ 的玩家规范了。Qt 也算识大体,支持用 CMake 来构建程序。所以,只要你用的是能写 C++ 的工具,理论上都能搞 Qt。 创建应用程序界面的时候,我们一般会选用 QWi…

    C++ 2023年4月24日
    00
  • 高效c语言1快速入门

    本章将开发你的第一个C语言程序:传统的 “Hello, world!”程序。然后讨论一些编辑器和编译器的选项,并阐述移植性问题。 Hello, world! #include <stdio.h> #include <stdlib.h> int main(void) { puts(“Hello, world!”); return EXI…

    C++ 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部