如何查找程序正在等待的位置

How to find where the program is waiting

本文关键字:在等待 位置 程序 何查找 查找      更新时间:2023-10-16

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

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

如果它崩溃了,我至少有机会使用调试器找到源代码。但通过这种方式,我不知道如何使用什么工具来查找错误。我甚至不能为你发布代码示例。唯一可能有帮助的是用cout点击许多地方,以直观地了解应用程序的位置

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

如果您在Linux下运行,那么只需使用gdb来运行程序。当应用程序"静音"时,用CTRL+C中断它,然后键入backtrace查看调用堆栈。有了这个,你会发现你的应用程序被阻止的功能。

在linux环境下,gdb会有很大帮助。另一个有很大帮助的工具是strace(这也可以用于程序出现问题的地方,因为strace不需要重新编译来跟踪它们,所以源代码不容易获得。)

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

iotopLTTngFtrace是在这种情况下对您有帮助的少数其他工具。