Valgrind
Valgrind 是一个用于内存调试、内存泄漏检测和性能分析的开源工具集。
valgrind [选项] ./程序 [程序参数]Valgrind 包含多个工具,通过 --tool=<工具名> 选择,最常用的有:
| 工具 | 用途 |
|---|---|
| Memcheck | 内存错误检测器(默认) |
| Cachegrind | 缓存和分支预测分析器 |
| Callgrind | 调用图分析器 |
| Massif | 堆分析器 |
| Helgrind | 线程错误检测器 |
Memcheck 基本选项
Section titled “Memcheck 基本选项”| 选项 | 说明 |
|---|---|
--leak-check=<no|summary|yes|full> |
控制内存泄漏检测的详细程度(推荐 full) |
--show-leak-kinds=<kindset> |
指定要显示的内存泄漏类型 |
--track-origins=<yes|no> |
是否追踪未初始化变量的来源(默认 no) |
--errors-for-leak-kinds=<kinds> |
指定哪些泄漏类型应被视为错误 |
--show-leak-kinds 支持的泄漏类型:
definite:肯定泄漏(程序无法访问的内存)possible:可能泄漏(指针指向内存块中间)indirect:间接泄漏(通过其他泄漏内存访问)reachable:仍可访问(程序结束时仍有指针指向)all:所有类型
输出控制选项
Section titled “输出控制选项”| 选项 | 说明 |
|---|---|
--log-file=<filename> |
将输出重定向到文件 |
--error-exitcode=<number> |
发现错误时返回指定退出码 |
--num-callers=N |
设置调用栈回溯深度(默认 12,复杂程序可增大) |
编译并检测内存泄漏:
# 编译时加上 -g 以获取调试信息gcc -g -o program program.c
# 使用 Memcheck 进行完整检测valgrind --leak-check=full \ --show-leak-kinds=all \ --track-origins=yes \ --error-exitcode=1 \ ./program将检测结果输出到文件:
valgrind --leak-check=full \ --log-file=valgrind.log \ ./program