我是gdb的新手。 我有一个打开多个线程的应用程序。在特定时间,我发现我的应用程序行为不端。我需要调试我的应用程序。 我运行gdb并将其附加到正在运行的应用程序,并使用线程XYZ切换到一个线程。 在做bt我看到所有线程进入条件等待,我无法调试线程,即无法获得应用程序线程堆栈的真实图片。
因此我考虑使用gcore创建核心文件。
然而,当我在我的gdb中打开gcore文件时,我仍然看到pthread中的所有线程都有条件等待。
如何调试我的应用程序?
答案 0 :(得分:0)
当所有线程都停留在同步上时,这种情况称为“deadlock”。这通常是因为在程序进入死锁状态之前发生的算法错误或/和同步失败(如data-race)。因此,gdb显示的是失败的结果,而不是根本情况。
有很多工具比gdb更方便调试多线程错误,比如Intel Inspector XE或像valgrind这样的开源替代方案。
我个人倾向于使用更传统的方法,例如调试断言和日志记录,以便发现故障点。