如何找到程序在哪里等待

时间:2014-10-29 11:51:19

标签: c++ multithreading

我正在开发一个庞大的代码库。它是多线程的。

在运行linux based应用程序几个小时之后,最后,在报告之前,应用程序保持沉默。它不会死,它不会崩溃,它只是在那里等待。连接,互斥,条件变量......其中任何一个都可能是罪魁祸首。

如果它崩溃了,我至少有机会使用调试器找到源代码。但是这样,我不知道如何使用什么工具来查找错误。我甚至无法为您发布代码示例。唯一可以帮助的是用cout来点击许多地方以获得应用程序的可视化。

你遇到过这样的情况吗?你推荐什么?

2 个答案:

答案 0 :(得分:3)

如果您在Linux下运行,则只需使用gdb即可运行该程序。当应用程序“静音”时,用CTRL+C中断它,然后键入backtrace以查看调用堆栈。有了这个,您将找到阻止您的应用程序的功能。

答案 1 :(得分:1)

包含linux, gdb 将是很有帮助的。另一个可以提供很大帮助的工具是 strace (这也适用于程序存在问题的情况,因为strace不需要重新编译来跟踪它们。)

strace应拦截/记录进程调用的系统调用以及进程接收的信号。它将能够显示事件的顺序和所有呼叫的返回/恢复路径。这可以让你几乎更接近问题的区域。

在这种情况下,

iotop LTTng Ftrace 是其他一些对您有帮助的工具。