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

Linux中跟踪和可视化pthread行为的工具,linux,debugging,pthreads,trace,Linux,Debugging,Pthreads,Trace,我渴望找到一个工具,让我能够跟踪我正在处理的程序中pthreads的行为。我知道以前有类似的问题,请参见和 事实证明,推荐的工具不是我需要的,或者似乎不可能让它们在我的机器上工作。它是基于x86架构的32位Debian 6 结合似乎是我所寻找的。但不幸的是,我无法让它工作。(某些版本的工具无法编译,其他版本崩溃,从未真正看到它工作。不同的计算机(Ubuntu10.04 x64)显示其他bug) 是否有一种跟踪解决方案能够可视化Linux上的pthread程序的行为,而这种方法实际上是可行的 [L

我渴望找到一个工具,让我能够跟踪我正在处理的程序中pthreads的行为。我知道以前有类似的问题,请参见和

事实证明,推荐的工具不是我需要的,或者似乎不可能让它们在我的机器上工作。它是基于x86架构的32位Debian 6

结合似乎是我所寻找的。但不幸的是,我无法让它工作。(某些版本的工具无法编译,其他版本崩溃,从未真正看到它工作。不同的计算机(Ubuntu10.04 x64)显示其他bug)

是否有一种跟踪解决方案能够可视化Linux上的pthread程序的行为,而这种方法实际上是可行的

[Linux和OS/X]

我用过Memcheck,它的效果和广告上的一样。然而,我还没有使用可视化工具。不确定Helgrind的输出是否可以调整为使用kCachegrind查看

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

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

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

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

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

  • Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它会生成一个图表,显示一段时间内堆的使用情况,包括程序中负责内存分配最多的部分的信息

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

检查此项

(Linux跟踪工具包)


HTH

可以绘制状态空间图并检查违反的断言。

+1对于
Helgrind
,它是一个很好的工具。要快速尝试,请执行
valgrind--tool=helgrind./myprogram--args
。我已经能够看到比赛条件和死锁的可能原因,但仍然有一些讨厌的错误尚未被发现。特别是,我仍然无法找到为什么一些正在维护的程序无法在某些资源上获得读锁的原因,但是没有其他线程(我现在找不到)使用该资源——唯一可能的解释……欢迎使用任何其他有用的工具/建议:-)此答案中的链接是404:(