如何在VS Code及Visual Studio中检测内存泄漏?解决Valgrind未识别问题
VS Code中Valgrind未识别问题解决及Visual Studio内存泄漏检测指南
一、VS Code里Valgrind命令未识别的解决办法
你遇到的报错是因为Valgrind未安装、未配置到系统PATH,或者Windows环境下未通过WSL运行(Valgrind原生不支持Windows)。分平台处理如下:
Windows用户(必须用WSL)
- 安装WSL和Linux发行版
- 以管理员身份打开PowerShell,执行:
wsl --install,按提示重启电脑 - 设置Linux用户名和密码后,在WSL终端安装Valgrind:
sudo apt update && sudo apt install valgrind
- 以管理员身份打开PowerShell,执行:
- 在VS Code中切换到WSL环境
- 安装「Remote - WSL」扩展
- 点击左下角的><图标,选择「New WSL Window」,在这个窗口里打开你的C项目
- 编译并运行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用户
- 安装Valgrind
- Debian/Ubuntu:
sudo apt update && sudo apt install valgrind - macOS:用Homebrew执行
brew install valgrind,或通过MacPorts安装
- Debian/Ubuntu:
- 验证安装
- 执行
which valgrind,有路径输出则正常;无输出则检查安装是否成功,或手动将Valgrind路径添加到系统PATH
- 执行
- 编译运行
- 编译代码后执行上述正确的Valgrind命令即可
「Valgrind Task Integration」扩展一键运行配置
安装扩展后,可配置tasks.json实现一键检测:
- 按
Ctrl+Shift+B,选择「Create tasks.json file from template」→「Others」 - 替换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": [] } ] } - 之后按
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
相关产品推荐
相关产品推荐

