c++内存泄漏检测工具
我发现drmemory在windows环境检测c++内存泄漏好像有点不准确,windows环境总感觉差点意思,以后打算转到linux环境了
Linux: valgrind
- 安装valgrind
sudo apt install valgrind
- 生成可执行文件示例,注意需要添加-g参数
g++ -g leak.cpp -o leak
- 使用valgrind检测
valgrind --leak-check=full ./your_program
windows: drmemory(配合使用vs编译套件)
安装:Download (drmemory.org),安装zip版本,解压添加bin到环境变量
使用:drmemory.exe [options] – ,待检测的可执行程序需要在Debug模式下
- -light: 默认关闭,开启后只检测验证错误的轻量级模式;
- -brief: 默认关闭,开启后显示简化且易于阅读的错误报告;
- -visual_studio: 默认关闭,开启后直接在终端上显示报告,不会主动打开results.txt文件
drmemory -visual_studio -- .\DrMemory.exe
其他常用参数
-
-leaks_only
:-
用途: 只检测内存泄漏。
-
用法
drmemory -leaks_only -- your_program
-
-
-show_reachable
:-
用途: 在报告中显示程序结束时仍然可达(reachable)的内存块。
-
用法
drmemory -show_reachable -- your_program
-
-
-no_count_leaks
:-
用途: 禁止统计内存泄漏。
-
用法
drmemory -no_count_leaks -- your_program
-
-
-ignore_malloc_leaks
:-
用途: 忽略由
malloc
分配但未释放的内存。 -
用法
drmemory -ignore_malloc_leaks -- your_program
-
-
-light
:-
用途: 轻量级模式,减少检查以提高性能。
drmemory -light -- your_program
-
-
-heavy
:-
用途: 启用更全面的检查,可能会降低性能,但能够捕获更多的内存错误。
-
用法
drmemory -heavy -- your_program
-
-
-dr_ops
:-
用途: 传递给 DynamoRIO 的附加选项。
-
用法
drmemory -dr_ops "-disable_traces" -- your_program
-
-
-report_max
:-
用途: 限制报告中显示的错误数量,默认是 10 个。
-
用法
drmemory -report_max 20 -- your_program
-
-
-logdir
:-
用途: 指定日志文件的输出目录。
-
用法
drmemory -logdir ./logs -- your_program
-
-
-nudge_kills
:-
用途: 允许 Dr. Memory 在程序被终止时生成报告。默认是
on
。 -
用法
drmemory -nudge_kills off -- your_program
-
-
-callstack
:-
用途: 调整报告中的调用栈深度,默认为 10 层。
-
用法
drmemory -callstack 15 -- your_program
-
-
-exit_code_if_errors
:-
用途: 如果检测到错误,返回指定的退出代码。
-
用法
drmemory -exit_code_if_errors 1 -- your_program
-
-
-no_results_to_stderr
:-
用途: 不将结果输出到标准错误输出。
-
用法
drmemory -no_results_to_stderr -- your_program
-
3. 运行 Dr. Memory 并输出到指定目录
drmemory -logdir ./drmemory_logs -- your_program
这将生成日志文件并将其存储在指定的 ./drmemory_logs
目录中。
4. 结合其他工具使用
你可以结合参数使用,比如在轻量模式下,只检测内存泄漏,并将输出保存到指定目录:
bash
复制代码
drmemory -leaks_only -light -logdir ./drmemory_logs -- your_program