用于在Linux中跟踪和可视化pthread行为的工具

tec*_*ack 18 linux debugging trace pthreads

我渴望找到一个工具,允许我在我正在编写的程序中跟踪pthread的行为.我知道之前有过类似问题,请看这里这里.

事实证明,推荐的工具不是我需要的,或者似乎无法让他们在我的机器上工作.它是Debian 6,32位全部在x86架构上.

EZtraceViTE的结合似乎正是我所寻找的.但不幸的是,我无法让它发挥作用.(工具不会在某些版本中编译,其他版本崩溃,从未真正看到它工作.不同的计算机(Ubuntu 10.04 x64)显示其他错误)

是否有一个跟踪解决方案能够可视化Linux上的pthreaded程序的行为,实际上已知有效吗?

ree*_*ard 2

Valgrind 的工具套件 [ Linux 和 OS/X ]

我使用过 Memcheck,它的工作原理正如广告中所宣传的那样。不过我还没有使用过可视化工具。不确定 Helgrind 的输出是否可以适用于使用 kCachegrind 查看。

Valgrind 发行版包括四个[原文如此]有用的调试和分析工具:

  • Memcheck 检测内存管理问题,主要针对 C 和 C++ 程序。当程序在 Memcheck 的监督下运行时,所有内存的读写都会被检查,并且对 malloc/new/free/delete 的调用都会被拦截。因此,Memcheck 可以检测您的程序是否:

    访问不应该访问的内存...以危险的方式使用未初始化的值。泄漏内存。堆块释放错误(双重释放、不匹配释放)。将重叠的源和目标内存块传递给 memcpy() 和相关函数。Memcheck 在这些错误发生时立即报告这些错误,并给出发生错误的源代码行号...

  • Cachegrind 是一个缓存分析器。它对 CPU 中的 I1、D1 和 L2 缓存进行详细模拟,因此可以准确地查明代码中缓存未命中的来源...

  • Callgrind 由 Josef Weidendorfer 开发,是 Cachegrind 的扩展。它提供了 Cachegrind 提供的所有信息,以及有关调用图的额外信息。它在 3.2.0 版本中被合并到主要的 Valgrind 发行版中。单独提供的是一个令人惊叹的可视化工具KCachegrind,它可以更好地概述 Callgrind 收集的数据;它还可以用于可视化 Cachegrind 的输出。

  • Massif 是一个堆分析器。它通过定期拍摄程序堆快照来执行详细的堆分析。它生成一个图表,显示堆随时间的使用情况,包括程序的哪些部分负责最多内存分配的信息......

  • Helgrind是一个线程调试器,可以查找多线程程序中的数据争用。它查找由多个 (POSIX p-) 线程访问的内存位置,但找不到一致使用的 (pthread_mutex_) 锁。这些位置表明线程之间缺少同步,并且可能导致难以发现的与时间相关的问题。它对于任何使用 pthread 的程序都很有用。这是一个有点实验性的工具,因此特别欢迎您提供反馈。