gdb查看正确的线程堆栈。

时间:2014-09-11 10:59:27

标签: multithreading gdb

我是gdb的新手。 我有一个打开多个线程的应用程序。在特定时间,我发现我的应用程序行为不端。我需要调试我的应用程序。 我运行gdb并将其附加到正在运行的应用程序,并使用线程XYZ切换到一个线程。 在做bt我看到所有线程进入条件等待,我无法调试线程,即无法获得应用程序线程堆栈的真实图片。

因此我考虑使用gcore创建核心文件。

然而,当我在我的gdb中打开gcore文件时,我仍然看到pthread中的所有线程都有条件等待。

如何调试我的应用程序?

1 个答案:

答案 0 :(得分:0)

当所有线程都停留在同步上时,这种情况称为“deadlock”。这通常是因为在程序进入死锁状态之前发生的算法错误或/和同步失败(如data-race)。因此,gdb显示的是失败的结果,而不是根本情况。

有很多工具比gdb更方便调试多线程错误,比如Intel Inspector XE或像valgrind这样的开源替代方案。

我个人倾向于使用更传统的方法,例如调试断言和日志记录,以便发现故障点。