第 22 章 Valgrind
Valgrind 是一种用于构建动态分析工具的工具框架,可用于详细分析应用程序。默认安装已提供五种标准工具:Valgrind 工具通常用于调查内存管理和线程问题。Valgrind 提供了用户空间二进制文件支持,以检查是否有错误,比如使用未初始化的内存、内存不足/空内存的分配/空内存参数以及系统调用不正确的参数。其性能分析工具可用于大多数二进制文件;但是,与其他 profilers 相比,Valgrind 配置集运行会非常慢。要分析二进制文件,Valgrind 在特殊虚拟机内运行它,允许 Valgrind 截获所有二进制指令。Valgrind的工具最常用于查找用户空间程序中的与内存相关问题;它不适用于调试特定于时间的问题或内核空间检测和调试。
当为正在调查的程序或库安装 debuginfo 软件包时,Valgrind 报告非常有用和准确。请参阅 第 20.1 节 “使用调试信息启用调试”。
22.1. Valgrind 工具
在未选择特定工具时,Mer Memcheck 函数作为默认工具。
- cachegrind
- cachegrind 是一个缓存配置集,通过对 CPU 中 I1、D1 和 L2 缓存的详细模拟来准确识别代码中缓存丢失的缓存源。它显示缓存未命中、内存引用和指令的数量到源代码的各行; cachegrind 还提供每个功能、按模块和整个程序摘要,甚至可以为每个单独机器指令显示计数。
- Callgrind
-
与
cachegrind
类似,callgrind
可以模型缓存行为。但是,callgrind
的主要用途是记录所执行代码的调用数据。 - 衍生(如果是)
- 衍生版本 是堆配置集;它测量程序使用的堆内存量,提供有关堆块、堆管理开销和堆栈大小的信息。堆配置文件器在找到降低堆内存使用情况的方式非常有用。在使用虚拟内存的系统上,优化堆内存使用的程序不太可能耗尽内存,并且因为需要较少的分页速度可能更快。
- Helgrind
在使用 POSIX pthreads 线程原始的程序中,helgrind 会检测到同步错误。这些错误包括:
- POSIX pthreads API 的 Misuses
- 从锁定排序问题导致潜在的死锁
- 数据争用(即访问内存而无需充分锁定)