Valgrind
Valgrind 是一个检测框架,它附带了一系列用于分析应用程序性能的工具。它可以用于检测各种内存错误和内存管理问题,例如使用未初始化的内存或不当的内存分配和释放,或识别系统调用中使用不当的参数。要获取随 Red Hat Developer Toolset 版本 Valgrind 分发的完整分析工具列表,请参见表 12.1,“随 Red Hat Developer Toolset 分发的 Valgrind 工具”。
Valgrind 通过重写应用程序并对其重写的二进制文件进行检测来分析应用程序。这允许您在无需重新编译的情况下分析应用程序,但这也使得 Valgrind 比其他分析器明显慢,尤其是在执行极其详细的运行时。因此,它不适合调试时间特定的问题或内核空间调试。
Red Hat Developer Toolset 附带的 Valgrind 版本是 3.14.0。这个版本比 Red Hat Developer Toolset 之前版本中包含的版本更新,并提供了许多错误修复和增强功能。
表 12.1 随 Red Hat Developer Toolset 分发的 Valgrind 工具
名称 | 描述 |
---|---|
Memcheck | 通过拦截系统调用并检查所有读写操作来检测内存管理问题。 |
Cachegrind | 通过模拟一级指令缓存(I1)、一级数据缓存(D1)和统一的二级缓存(L2)来识别缓存未命中的来源。 |
Callgrind | 生成代表函数调用历史的调用图。 |
Helgrind | 检测使用 POSIX 线程原语的多线程 C、C++ 和 Fortran 程序中的同步错误。 |
DRD | 检测使用 POSIX 线程原语或任何建立在这些 POSIX 线程原语之上的线程概念的多线程 C 和 C++ 程序中的错误。 |
Massif | 监控堆和栈的使用情况。 |
安装 Valgrind
在 Red Hat Developer Toolset 中,Valgrind 由 devtoolset-8-valgrind 包提供,并自动与 devtoolset-8-perftools 一起安装。
要获取如何将 Red Hat Developer Toolset 及其相关包安装到系统的详细说明,请参见第 1.5 节,“安装 Red Hat Developer Toolset”。
请注意,如果您将 Valgrind 与 GNU Debugger 结合使用,建议使用 Red Hat Developer Toolset 中包含的 GDB 版本,以确保所有功能都得到完全支持。
使用 Valgrind
要在想要分析的程序上运行任何 Valgrind 工具:
$ scl enable devtoolset-8 'valgrind --tool=tool program argument...'
请参阅表 12.1,“随 Red Hat Developer Toolset 分发的 Valgrind 工具”,获取随 Valgrind 分发的工具列表。--tool
命令行选项的参数必须用小写字母指定,如果省略此选项,Valgrind 默认使用 Memcheck。例如,要在程序上运行 Cachegrind 以识别缓存未命中的来源:
$ scl enable devtoolset-8 'valgrind --tool=cachegrind program argument...'
请注意,可以使用 scl
实用程序执行任何命令,使其使用 Red Hat Developer Toolset 二进制文件而不是 Red Hat Enterprise Linux 系统等效项。这这允许你默认使用Red Hat Developer Toolset Valgrind运行shell会话:
$ scl enable devtoolset-8 'bash'
要随时验证您正在使用的 Valgrind 版本:
$ which valgrind
Red Hat Developer Toolset 的
valgrind
可执行文件路径将以 /opt 开头。或者,您可以使用以下命令确认版本号与 Red Hat Developer Toolset Valgrind 的版本号相匹配:$valgrind --version
其他资源
有关 Valgrind 及其功能的更多信息,请参见下面列出的资源。
安装文档
- valgrind(1) ——
valgrind
实用程序的手册页提供了有关如何使用 Valgrind 的详细信息。要显示 Red Hat Developer Toolset 中包含的版本的手册页:
$ scl enable devtoolset-8 'man valgrind'
- Valgrind 文档 —— Valgrind 的 HTML 文档位于
/opt/rh/devtoolset-8/root/usr/share/doc/devtoolset-8-valgrind-3.13.0/html/index.html
。
在线文档
- Red Hat Enterprise Linux 6 开发者指南和 Red Hat Enterprise Linux 7 开发者指南 —— Red Hat Enterprise Linux 6 和 7 的开发者指南提供了有关 Valgrind 及其 Eclipse 插件的更多信息。
- Red Hat Enterprise Linux 6 性能调优指南和 Red Hat Enterprise Linux 7 性能调优指南 —— Red Hat Enterprise Linux 6 和 7 的性能调优指南提供了有关使用 Valgrind 分析应用程序的更详细信息。
另见
- 第 1 章,Red Hat Developer Toolset —— Red Hat Developer Toolset 的概述以及如何在您的系统上安装它的更多信息。
- 第 10 章,memstomp —— 使用 memstomp 实用程序识别不允许的各种标准的重叠内存区域的库函数调用的说明。
- 第 11 章,SystemTap —— SystemTap 工具的介绍以及如何使用它来监控运行中的系统活动。
- 第 13 章,OProfile —— 使用 OProfile 工具确定代码的哪些部分消耗了最多的 CPU 时间以及原因的说明。
- 第 14 章,Dyninst —— 使用 Dyninst 库来工具化用户空间可执行文件的说明。