我正在开发一个庞大的代码库。它是多线程的。
在运行linux based
应用程序几个小时之后,最后,在报告之前,应用程序保持沉默。它不会死,它不会崩溃,它只是在那里等待。连接,互斥,条件变量......其中任何一个都可能是罪魁祸首。
如果它崩溃了,我至少有机会使用调试器找到源代码。但是这样,我不知道如何使用什么工具来查找错误。我甚至无法为您发布代码示例。唯一可以帮助的是用cout
来点击许多地方以获得应用程序的可视化。
你遇到过这样的情况吗?你推荐什么?
答案 0 :(得分:3)
如果您在Linux下运行,则只需使用gdb
即可运行该程序。当应用程序“静音”时,用CTRL+C
中断它,然后键入backtrace
以查看调用堆栈。有了这个,您将找到阻止您的应用程序的功能。
答案 1 :(得分:1)
包含linux, gdb 将是很有帮助的。另一个可以提供很大帮助的工具是 strace (这也适用于程序存在问题的情况,因为strace不需要重新编译来跟踪它们。)
strace应拦截/记录进程调用的系统调用以及进程接收的信号。它将能够显示事件的顺序和所有呼叫的返回/恢复路径。这可以让你几乎更接近问题的区域。
在这种情况下,iotop , LTTng 和 Ftrace 是其他一些对您有帮助的工具。