第 22 章 Valgrind


Valgrind 是一种用于构建动态分析工具的工具框架,可用于详细分析应用程序。默认安装已提供五种标准工具:Valgrind 工具通常用于调查内存管理和线程问题。Valgrind 提供了用户空间二进制文件支持,以检查是否有错误,比如使用未初始化的内存、内存不足/空内存的分配/空内存参数以及系统调用不正确的参数。其性能分析工具可用于大多数二进制文件;但是,与其他 profilers 相比,Valgrind 配置集运行会非常慢。要分析二进制文件,Valgrind 在特殊虚拟机内运行它,允许 Valgrind 截获所有二进制指令。Valgrind的工具最常用于查找用户空间程序中的与内存相关问题;它不适用于调试特定于时间的问题或内核空间检测和调试。

当为正在调查的程序或库安装 debuginfo 软件包时,Valgrind 报告非常有用和准确。请参阅 第 20.1 节 “使用调试信息启用调试”

22.1. Valgrind 工具

Valgrind 套件由以下工具组成:

Memcheck

此工具检测程序中的内存管理问题:

  • 通过检查内存的所有读取和写入
  • 通过截获内存操作,如对 malloc 的调用、可用 或删除

Memcheck 或许是最常用的 Valgrind 工具,因为内存管理问题难以使用其他手段进行检测。在较长的时间段内,这些问题往往不会检测到,从而导致出现难以诊断的崩溃。

在未选择特定工具时,Mer Memcheck 函数作为默认工具。

cachegrind
cachegrind 是一个缓存配置集,通过对 CPU 中 I1、D1 和 L2 缓存的详细模拟来准确识别代码中缓存丢失的缓存源。它显示缓存未命中、内存引用和指令的数量到源代码的各行; cachegrind 还提供每个功能、按模块和整个程序摘要,甚至可以为每个单独机器指令显示计数。
Callgrind
cachegrind 类似,callgrind 可以模型缓存行为。但是,callgrind 的主要用途是记录所执行代码的调用数据。
衍生(如果是)
衍生版本 是堆配置集;它测量程序使用的堆内存量,提供有关堆块、堆管理开销和堆栈大小的信息。堆配置文件器在找到降低堆内存使用情况的方式非常有用。在使用虚拟内存的系统上,优化堆内存使用的程序不太可能耗尽内存,并且因为需要较少的分页速度可能更快。
Helgrind

在使用 POSIX pthreads 线程原始的程序中,helgrind 会检测到同步错误。这些错误包括:

  • POSIX pthreads API 的 Misuses
  • 从锁定排序问题导致潜在的死锁
  • 数据争用(即访问内存而无需充分锁定)
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.