我渴望找到一个工具,允许我在我正在处理的程序中跟踪pthread的行为。我知道之前有过类似问题,请参阅here和here。
事实证明,推荐的工具不是我需要的,或者似乎无法让他们在我的机器上工作。它是Debian 6,32位全部在x86架构上。
EZtrace与ViTE结合使用似乎就是我要找的。但不幸的是,我无法让它发挥作用。 (工具不会在某些版本中编译,其他版本崩溃,从未真正看到它工作。不同的计算机(Ubuntu 10.04 x64)显示其他错误)
是否有一个跟踪解决方案能够可视化Linux上的pthreaded程序的行为,实际上已知有效?
答案 0 :(得分:2)
Valgrind's Tool Suite [Linux和OS / X]
我使用过Memcheck,它的工作方式与广告一样。但是,我还没有使用可视化工具。不确定是否可以调整Helgrind的输出以便使用kCachegrind进行查看。
Valgrind发行版包括四个[原文如此]有用的调试和分析工具:
Memcheck检测内存管理问题,主要针对C和C ++程序。当程序在Memcheck的监督下运行时,将检查所有内存的读写操作,并拦截对malloc / new / free / delete的调用。因此,Memcheck可以检测您的程序:
访问内存不应该...... 以危险的方式使用未初始化的值。 泄漏记忆。 糟糕的堆块释放(双重释放,不匹配的释放)。 将重叠的源和目标内存块传递给memcpy()和相关函数。 Memcheck会在发生这些错误时立即报告这些错误,并给出发生错误的源代码行...
Cachegrind是一个缓存分析器。它可以对CPU中的I1,D1和L2缓存进行详细模拟,因此可以准确地找出代码中缓存未命中的来源......
Josef Weidendorfer的Callgrind是Cachegrind的扩展。它提供了Cachegrind所做的所有信息,以及有关调用图的额外信息。它被折叠到版本3.2.0中的主要Valgrind发行版中。另外还有一个令人惊叹的可视化工具 KCachegrind ,它可以更好地概述Callgrind收集的数据;它也可以用于可视化Cachegrind的输出。
Massif是一个堆分析器。它通过获取程序堆的常规快照来执行详细的堆分析。它生成一个显示堆使用情况的图表,包括有关程序的哪些部分负责大部分内存分配的信息......
Helgrind是一个线程调试器,可在多线程程序中查找数据争用。它查找由多个(POSIX p-)线程访问的内存位置,但是没有找到一致的(pthread_mutex_)锁。这些位置表示线程之间缺少同步,并且可能导致难以发现的与时序相关的问题。它对任何使用pthread的程序都很有用。这是一个有点实验性的工具,所以特别欢迎您的反馈。
答案 1 :(得分:1)
答案 2 :(得分:0)
DIVINE 可以绘制状态空间图并检查违反的断言。