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

标签 multithreading testing code-coverage deadlock call-graph

想知道有没有工具可以

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

    如果我没有清楚地解释我的问题,我深表歉意,我很乐意提供任何详细信息。

最佳答案

VTune Profiler来自英特尔的可以做一些你要求的事情。来自 VTune 站点:

锁定和等待:使用英特尔® 性能分析工具快速找到并行程序性能低下的常见原因:锁定等待时间过长,而内核在等待期间未得到充分利用。

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

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

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

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

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

关于multithreading - 可视化多线程 C++ 应用程序调用图、多线程代码覆盖率的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749107/

相关文章:

.net - 有效的单元测试覆盖率(以及实际应该测试什么?)

c# - 测量 UWP 应用程序的代码覆盖率

Java线程等待和通知方法

c++ - std::lock_guard 示例,解释其工作原理

linux - 如何在终端中以静默模式运行 Mocha 测试

testing - Xcode Simulator:如何获取设置 “Screen time”?

c# - Parallel.ForEach挂起一个大循环

java - LinkedBlockingQueue - 无界 - 放置阻塞?

testing - 如何在 void 方法上应用 jUnit 测试

javascript - 如何在 istanbul 的代码覆盖率中忽略 .catch promise ?