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

打印 上一主题 下一主题

主题 945|帖子 945|积分 2835

说明

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

目录


1. 使用前的准备

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

在项目的 main.cpp 文件中,添加头文件:
  1. #include <vld.h>
复制代码
选择 x86 或者 x64 编译器,选择 Debug 模式,编译运行,就可以正常使用了。我的 VS 版本是 Microsoft Visual Studio Professional 2015,VLD 安装目录为 D:\Program Files (x86)\Visual Leak Detector。
3.1 无内存泄漏时的输出报告

程序运行结束后,若没有检测到内存泄漏,VLD 会输出以下 4 行报告:
  1. Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
  2. Visual Leak Detector Version 2.5.1 installed.
  3. No memory leaks detected.
  4. Visual Leak Detector is now exiting.
复制代码
3.2 有内存泄漏时的输出报告

程序运行结束后,若检测到内存泄漏,VLD 会输出以下报告(本例中出现一处内存泄漏,使用 x86 编译器):
  1. Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
  2. Visual Leak Detector Version 2.5.1 installed.
  3. WARNING: Visual Leak Detector detected memory leaks!
  4. ---------- Block 1 at 0x008D8980: 20 bytes ----------
  5.   Leak Hash: 0xC3828EE7, Count: 1, Total 20 bytes
  6.   Call Stack (TID 12948):
  7.     f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (15): testVLD.exe!operator new[]() + 0x9 bytes
  8.     e:\cworkspace\vsdemo\testvld\testvld\main.cpp (8): testVLD.exe!main() + 0x7 bytes
  9.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (74): testVLD.exe!invoke_main() + 0x1B bytes
  10.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (264): testVLD.exe!__scrt_common_main_seh() + 0x5 bytes
  11.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (309): testVLD.exe!__scrt_common_main()
  12.     f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp (17): testVLD.exe!mainCRTStartup()
  13.     KERNEL32.DLL!BaseThreadInitThunk() + 0x19 bytes
  14.     ntdll.dll!__RtlUserThreadStart() + 0x2F bytes
  15.     ntdll.dll!_RtlUserThreadStart() + 0x1B bytes
  16.   Data:
  17.     CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
  18.     CD CD CD CD                                                  ........ ........
  19. Visual Leak Detector detected 1 memory leak (56 bytes).
  20. Largest number used: 56 bytes.
  21. Total allocations: 56 bytes.
  22. Visual Leak Detector is now exiting.
复制代码
若使用的是 x64 编译器,报告输出如下:
  1. Visual Leak Detector read settings from: D:\Program Files (x86)\Visual Leak Detector\vld.ini
  2. Visual Leak Detector Version 2.5.1 installed.
  3. “testVLD.exe”(Win32): 已加载“C:\Windows\System32\kernel.appcore.dll”。已加载符号。
  4. WARNING: Visual Leak Detector detected memory leaks!
  5. ---------- Block 1 at 0x00000000650C6AD0: 20 bytes ----------
  6.   Leak Hash: 0x72624394, Count: 1, Total 20 bytes
  7.   Call Stack (TID 12984):
  8.     f:\dd\vctools\crt\vcstartup\src\heap\new_array.cpp (16): testVLD.exe!operator new[]()
  9.     e:\cworkspace\vsdemo\testvld\testvld\main.cpp (8): testVLD.exe!main() + 0xA bytes
  10.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (75): testVLD.exe!invoke_main()
  11.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (264): testVLD.exe!__scrt_common_main_seh() + 0x5 bytes
  12.     f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl (309): testVLD.exe!__scrt_common_main()
  13.     f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp (17): testVLD.exe!mainCRTStartup()
  14.     KERNEL32.DLL!BaseThreadInitThunk() + 0x14 bytes
  15.     ntdll.dll!RtlUserThreadStart() + 0x21 bytes
  16.   Data:
  17.     CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
  18.     CD CD CD CD                                                  ........ ........
  19. Visual Leak Detector detected 1 memory leak (72 bytes).
  20. Largest number used: 72 bytes.
  21. Total allocations: 72 bytes.
  22. Visual Leak Detector is now exiting.
复制代码
4. 无法正常使用的可能原因


  • 检查是否是 Debug 模式,VLD 无法直接在 Release 模式下使用。
  • 检查环境变量是否正确配置,环境变量是 VLD 安装程序自动配置的,但是若在安装时没有勾选自动配置,会导致环境变量缺失,查看 Path 这一系统变量中是否添加了 VLD 的 bin 路径(我的是 D:\Program Files (x86)\Visual Leak Detector\bin\Win32 和 D:\Program Files (x86)\Visual Leak Detector\bin\Win64 这两个)。
  • 在 VLD 安装成功后,是否已经重启了 VS,因为要加载 VLD 安装时新添的环境变量,若没重启 VS,可能找不到 VLD 的依赖环境。
  • 检查 include 与 lib 目录是否被正确添加,这一步也是 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)。
  • 清除上一次的编译文件,重新编译运行一下。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表