Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading gdb查看线程的正确堆栈。_Multithreading_Gdb - Fatal编程技术网

Multithreading gdb查看线程的正确堆栈。

Multithreading gdb查看线程的正确堆栈。,multithreading,gdb,Multithreading,Gdb,我是gdb的新手。 我有一个打开多个线程的应用程序。在某个特定的时间,我发现我的应用程序运行不正常。我需要调试我的应用程序。 我运行gdb并将其连接到正在运行的应用程序,然后使用线程XYZ切换到线程。 在执行bt时,我看到所有线程都进入了条件等待,我无法调试线程,即无法获得应用程序线程堆栈的真实图像 因此,我考虑使用gcore创建一个核心文件 但是,当我在gdb中打开gcore文件时,仍然可以看到pthread conditional wait中的所有线程 如何调试我的应用程序?这种情况下,所有

我是gdb的新手。 我有一个打开多个线程的应用程序。在某个特定的时间,我发现我的应用程序运行不正常。我需要调试我的应用程序。 我运行gdb并将其连接到正在运行的应用程序,然后使用线程XYZ切换到线程。 在执行bt时,我看到所有线程都进入了条件等待,我无法调试线程,即无法获得应用程序线程堆栈的真实图像

因此,我考虑使用gcore创建一个核心文件

但是,当我在gdb中打开gcore文件时,仍然可以看到pthread conditional wait中的所有线程


如何调试我的应用程序?

这种情况下,所有卡在同步上的线程都被称为“”。这通常是由于在程序进入死锁状态之前发生的算法错误或/和同步失败(如)造成的。因此,gdb显示的是失败的结果,而不是根案例

有很多工具比gdb或开源工具更方便调试多线程错误


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

“应用程序行为不正常”——它到底是如何行为不正常的?它是没有响应,还是做了一些不正确的事情?如果是前者,GDB将向您显示线程的真实状态(应用程序处于死锁状态)。如果是后者,则GDB似乎会导致应用程序死锁,这是一个完全不同的问题。AFAICT,Intel Inspector和Valgrind都不会帮助调试死锁。Intel Inspector无法检测到涉及四个以上线程的死锁问题。根据@EmployedRussian,至于Valgrind,我没有使用它,但我知道它有一些种族检测功能。