You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VS Code及Visual Studio中检测内存泄漏?解决Valgrind未识别问题

VS Code中Valgrind未识别问题解决及Visual Studio内存泄漏检测指南

一、VS Code里Valgrind命令未识别的解决办法

你遇到的报错是因为Valgrind未安装、未配置到系统PATH,或者Windows环境下未通过WSL运行(Valgrind原生不支持Windows)。分平台处理如下:

Windows用户(必须用WSL)

  1. 安装WSL和Linux发行版
    • 以管理员身份打开PowerShell,执行:wsl --install,按提示重启电脑
    • 设置Linux用户名和密码后,在WSL终端安装Valgrind:sudo apt update && sudo apt install valgrind
  2. 在VS Code中切换到WSL环境
    • 安装「Remote - WSL」扩展
    • 点击左下角的><图标,选择「New WSL Window」,在这个窗口里打开你的C项目
  3. 编译并运行Valgrind
    • 先编译代码:gcc mem_leak_fix.c -o mem_leak_fix
    • 执行修正后的Valgrind命令(注意路径是./mem_leak_fix,你之前少了个斜杠):
      valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt ./mem_leak_fix
      

Linux/macOS用户

  1. 安装Valgrind
    • Debian/Ubuntu:sudo apt update && sudo apt install valgrind
    • macOS:用Homebrew执行brew install valgrind,或通过MacPorts安装
  2. 验证安装
    • 执行which valgrind,有路径输出则正常;无输出则检查安装是否成功,或手动将Valgrind路径添加到系统PATH
  3. 编译运行
    • 编译代码后执行上述正确的Valgrind命令即可

「Valgrind Task Integration」扩展一键运行配置

安装扩展后,可配置tasks.json实现一键检测:

  1. 按Ctrl+Shift+B,选择「Create tasks.json file from template」→「Others」
  2. 替换tasks.json内容为:
    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "Valgrind Check",
                "type": "shell",
                "command": "valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt ./mem_leak_fix",
                "group": "test",
                "problemMatcher": []
            }
        ]
    }
    
  3. 之后按Ctrl+Shift+B,选「Valgrind Check」就能自动检测

二、Visual Studio中内存泄漏检测操作

Visual Studio自带内存检测工具,无需额外安装,步骤如下:

1. 配置项目调试环境

  • 右键项目→「属性」
  • 「配置属性」→「C/C++」→「预处理器」:添加预处理器定义_CRTDBG_MAP_ALLOC
  • 「配置属性」→「C/C++」→「代码生成」:将「运行库」设为「多线程调试(/MTd)」或「多线程DLL调试(/MDd)」(必须是Debug模式)

2. 代码中添加检测逻辑

在main函数开头加入内存检测初始化代码:

#include <crtdbg.h> // 必须包含该头文件

int main(void)
{
    // 开启内存泄漏检测,程序退出时自动生成报告
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

    // 你的原有代码
    int* mptr = malloc(sizeof(int));
    int* mptr1 = malloc(sizeof(int));
    *mptr = 10;
    *mptr1 = 20;
    printf("mptr: %d\n",*mptr);
    printf("mptr1: %d\n",*mptr1);
    free(mptr1);
    mptr1=NULL; 

    return 0;
}

3. 运行查看泄漏报告

  • 切换到「Debug」模式(工具栏解决方案配置选Debug)
  • 按F5启动调试,程序结束后打开「输出」窗口(视图→输出)
  • 在输出窗口下拉菜单选「调试」,就能看到内存泄漏详细报告,包括未释放内存的分配位置

进阶:使用可视化内存诊断工具

  • 启动调试后,点击调试工具栏的「内存诊断」按钮(或调试→窗口→内存诊断)
  • 工具会全程记录内存分配,程序结束后生成可视化报告,直观展示泄漏内存块、调用堆栈等信息

内容的提问来源于stack exchange,提问作者Stackyquest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 01:04:55