Valgrind介绍
Valgrind是一款Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。 Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:
- 使用未初始化的内存 (Use of uninitialised memory)
- 使用已经释放了的内存 (Reading/writing memory after it has been free’d)
- 使用超过malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
- 对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
- 申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever) malloc/free/new/delete
- 申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
- src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
可惜这么强大的工具(几乎)只能在linux上运行, Windows上是不能直接使用的.好在可以通过Windows下的linux子系统进行使用.
https://www.valgrind.org/downloads/
下面是配置linux子系统并初步使用Valgrind的教程:
配置教程
Windows下linux子系统(WSL)的安装
微软官方有很清晰的教程,在此贴上链接:
https://learn.microsoft.com/zh-cn/windows/wsl/install
除了下载,官方文档还含有很丰富的wsl使用教程,顺带都可以详细学习一下.
wsl --install
wsl --list --online
wsl --install -d <DistroName>
Valgrind的简单使用
打开你想要检查的程序(exe)所在的文件夹,右键打开终端(Powersell)
命令wsl用于调用linux中的命令,由于Valgrind只能在linux中使用,因此前面要加上’wsl’
假设你要检测的程序名字是’test.exe’, 输入命令
wsl valgrind .\test
程序开始运行,Valgrind就会对你的程序进行内存分析了.
小技巧: 编译exe文件时,可以增加debug模式, 比方说用
gcc -o test -g test.cpp,
这样Valgrind就会显示出你哪一行的代码运行导致了内存问题.就像gdb一样.
Attention: 这里exe文件名前记得加上.\的文件目录,
我测试的时候不加的话运行的程序不是我提供的有内存泄露问题的exe文件.