可视化多线程C++应用程序调用图,多线程代码覆盖的工具?

fan*_*sid 5 testing multithreading deadlock code-coverage call-graph

我想知道是否有工具可以

  • 帮助可视化大型多线程应用程序的调用图.
  • 具体来说,我想看看多个线程如何在一个核心上交错/在多个核心上同时执行.
  • 该工具可以理想地识别可能的等待/死锁/竞争条件.
  • 最终,我希望根据线程在运行时(多线程代码覆盖工具)之间如何相互交互来进行代码覆盖,以便找到潜在的多线程错误.

    如果我没有清楚地解释我的问题,我很抱歉,我很乐意提供任何细节.

Mig*_*uel 2

Intel 的VTune Profiler可以满足您的一些要求。来自 VTune 网站:

\n\n

锁定和等待:使用 Intel\xc2\xae 性能分析工具快速找到并行程序中性能缓慢的常见原因:锁定等待时间过长,而等待期间内核未得到充分利用。

\n\n

时间轴可视化线程行为:查看线程何时运行和等待,以及何时发生转换。

\n\n

如果您正在寻找开源/免费的东西,那么Valgrind有一个名为 Helgrind 的实验工具,据说可以在多线程程序中查找竞争。我无法评论它,我没有使用过它。

\n\n

我应该指出,我还没有成功地利用这些或其他分析器进行多线程调试和优化,相反,我开发了自己的技术。

\n\n

为了识别锁争用,我的首选技术是使用扩展的 Mutex 类来记录在每个实例上完成的所有操作。我以非常轻量级的方式执行此操作,以便应用程序性能不会发生很大变化。

\n\n

为了确定竞争条件,我发现蛮力方法是最好的。我只是设计一个可以运行很长一段时间的测试,有时需要几个小时或几天,具体取决于情况。我总是在至少两个不同的平台上运行测试(如果可以的话更多),因为不同的操作系统使用不同的调度程序,这可以提供更好的覆盖范围。

\n