valgrind 是一款用于内存调试、内存泄漏检测以及性能分析、检测线程错误的软件开发工具集。
其中,包括 memcheck 工具是定位内存泄露或溢出等问题。这篇文章介绍 memcheck 工具的具体使用方法,其他的工具以后有机会再介绍。
(1) --tool=
(2)--quiet:安静地运行,只打印错误信息;
(3)--verbose:更详细的信息,增加错误数统计;
(4)--trace-childer=no | yes:跟踪子线程;
(5)--track-fds=no | yes:跟踪打开的文件描述;
(6)--time-stamp=no | yes:增加时间戳到 Log 信息;
(7)--log-fd=
(8)--log-file=
(9)--xml=yes:将错误信息以xml格式输出,只有memcheck可用;
(10)--xml-file=
(11)--error-limit=no | yes:如果错误太多,则停止显示新错误;
(12)--error-exitcode=
(13)--leak-check=no | summary | full:对发现的内存泄露给出的信息级别,只有memcheck可用。(建议添加)
(14)--show-reachable=no | yes:用于控制是否检测控制范围之外的泄漏,比如全局指针、static指针等。
(15)–num-callers=(num):这个值默认是12,最高是50。表示显示多少层的堆栈,设置越高会使Valgrind运行越慢而且使用更多的内存,但是在嵌套调用层次比较高的程序中非常实用。
(16)--trace-children=no | yes:是否跟入子进程。
valgrind 工具集包括很多的工具,每个工具将分别用于排查代码中出现的不同类型 bug。
valgrind 工具集中,常用的工具如下:
Memcheck,Callgrind,Cachegrind,Helgrind,Massif 等工具。
这些工具一般使用方法,即终端输入如下命令:
valgrind --tool=工具名 程序名
例如,当使用 Memcheck 工具检测一些内存问题时,可以使用如下命令定位问题:
valgrind --tool=memcheck --leak-check=full 程序名
注意:编译程序需要加上 -g 选项, 即包含调试信息,以便 Memcheck 工具检测到错误消息包含确切的 C 代码行号。