使用 VS Code 在 C++ 应用程序中查找内存泄漏

Posted

技术标签:

【中文标题】使用 VS Code 在 C++ 应用程序中查找内存泄漏【英文标题】:Finding memory leaks in a C++ application with VS Code 【发布时间】:2020-05-12 04:12:09 【问题描述】:

有没有办法使用 Visual Studio Code 在 C++ 应用程序中显示内存泄漏报告?

也许是某个图书馆?一个扩展?使用 MinGW 编译器?

我在带有 C++ 扩展 (0.26.3) 的 Windows 10 上使用 Visual Studio Code (1.41.1)。 我已经使用Configure VS Code for Microsoft C++ 中编写的 MSVC 编译器工具集 (2019) 配置了 VS Code。 但是,我无法使用 CRT 库显示内存泄漏,如Find memory leaks with the CRT library 中所写。 我的简单示例代码:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#include <iostream>

int main() 
    printf("Hello world!\n");

    int *a = new int;
    *a = 8;
    //delete a;

    _CrtDumpMemoryLeaks();
    return 0;

使用此代码,我看不到_CrtDumpMemoryLeaks() 生成的任何报告。 在调试代码时,编译器似乎完全跳过了 _CrtDumpMemoryLeaks(); 行。 难道我做错了什么? 我尝试使用 _DEBUG=1 定义更改配置,但是编译器甚至跳过了 #ifdef _DEBUG 语句。

【问题讨论】:

【参考方案1】:

您似乎可以通过在项目的 .vscode 文件夹内的 tasks.json 文件的 args 数组中添加编译器选项 "/MDd""/MTd" 来发现带有 MSVC 的 VS Code C++ 应用程序中的内存泄漏(没有任何第三方应用程序或工具)。 像这样的:

"args": [
            "/Zi", // Generates complete debugging information
            "/MDd", // Use /MDd or /MTd to define _DEBUG and allow _CrtDumpMemoryLeaks()
            "/EHsc", // Specifies the model of exception handling - mode 'sc'
            "/Fe:", // Renames the executable file
            "$fileDirname\\$fileBasenameNoExtension.exe",
            "$file"
        ],

这基本上启用了Find memory leaks with the CRT library 中列出的所有内容 然后,在运行程序时,_CrtDumpMemoryLeaks() 会检测到内存泄漏并在DEBUG CONSOLE 中显示它们:

Detected memory leaks!
Dumping objects ->
113 normal block at 0x015C8460, 4 bytes long.
 Data: <    > 08 00 00 00 
Object dump complete.

最后,您可以在_CrtSetBreakAlloc(113) 命令中输入大括号内的数字,以创建内存分配断点,以查找您忘记删除的变量。

【讨论】:

以上是关于使用 VS Code 在 C++ 应用程序中查找内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

VS Code 不会使用多个 .ccp 源文件构建 c++ 程序

如何用Code Blocks创建C++控制台项目

vs code安装使用ESLint

VS Code 是不是有用于 C++ 扩展的内存查看器和/或反汇编器?

VS CODE中如何快速定位到需要的源码?

VS CODE中如何快速定位到需要的源码?