Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3. 使用 Valgrind 简要描述内存使用

Valgrind 是为用户空间二进制提供检测的框架。它与大量用于简要描述和分析程序性能的工具一同发布。本小节提供的工具可用于探测内存错误,比如使用未初始化内存以及不正确地分配或者取消分配内存。这些工具都包含在 valgrind 软件包中,并可使用以下命令运行:
valgrind --tool=toolname program
使用您要使用的工具名称替换 toolname(要对内存进行简要概述,请使用 memcheck, massif 或者 cachegrind),同时使用您要使用 Valgrind 进行简要概述的程序替换 program。请注意 Valgrind 的检测可能造成程序比正常情况运行更缓慢。
Valgrind 的功能概述请参考 第 3.5.3 节 “Valgrind”。详情,包括用于 Eclipse 的插件请参考《开发者指南》,其链接为 http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/。您还可以在安装 valgrind 软件包后使用 man valgrind 命令查看相关文档,或者在以下位置查找这些文档:
  • /usr/share/doc/valgrind-version/valgrind_manual.pdf 以及
  • /usr/share/doc/valgrind-version/html/index.html

5.3.1. 使用 Memcheck 简要概述内存使用

Memcheck 是默认 Valgrind 工具,且可以与 valgrind program 一同运行,而无需指定 --tool=memcheck。它可探测和报告大量很难探测和诊断的内存错误,比如不应该发生的内存访问,使用未定义或者未初始化值,错误释放的堆内存,重叠的光标以及内存泄漏。运行 Memcheck 时程序运行速度要比正常运行时慢 10-30 倍。
Memcheck 根据探测的问题类型返回具体错误。这些错误在 Valgrind 文档中有具体论述,文档位置为 /usr/share/doc/valgrind-version/valgrind_manual.pdf
注:Memcheck 只能报告这些错误 — 它不能放置这些错误发生。如果您的程序采用一般会造成片段失败的的方法访问内存,片段失败仍会发生。但 Memcheck 将在失败前记录出错信息。
Memcheck 提供可用来着重检查进程的命令行选项。有些可用的选项为:
--leak-check
启用后,Memcheck 会在客户端程序完成后搜索内存泄漏。其默认值为 summary,它输出找到的泄漏数。其他可能的值为 yesfull,这两个选项都会给出每个泄漏的详细情况,且 no 会禁用内存泄漏检查。
--undef-value-errors
启用后(将其设定为 yes),Memcheck 会报告使用未定义值报告的错误。禁用时(将其设定为 no),则不会报告未定义值错误。默认启用这个选项。禁用该选项会稍稍提高 Memcheck 速度。
--ignore-ranges
可让用户指定一个或者多个 Memcheck 检查可寻址能力时应该忽略的范围。多个范围使用逗号分开,例如:--ignore-ranges=0xPP-0xQQ,0xRR-0xSS
选项完整列表请参考 /usr/share/doc/valgrind-version/valgrind_manual.pdf 中的文档。