2010-03-03 103 views
1

要调试多线程程序以防止出现死锁或活锁等情况,那么有用的实用程序是什么?我想知道gcore是否给出了进程中所有正在运行的thred的堆栈转储,或者只是主线程。另外,gcore会暂停/终止正在运行的进程吗?有关调试多线程程序的任何信息都将非常有用。如何在多线程的C++运行过程中获取线程跟踪?

回答

0

gdb具有一些用于处理线程的好功能。我的最爱之一是thread apply。这允许您为多个线程运行相同的命令。

例如,如果你想获得的所有线程的回溯,您可以使用此:

thread apply all where 

为了打破这种下来,命令thread apply开始。

接下来是线程列表。在这里,我使用关键字all将此应用于过程中的每个线程。您也可以使用空格分隔的gdb线程ID列表(thread apply 1 2 3 command)。

最后是要执行的命令。我用where向您显示调用堆栈,但您可以使用任何您想要的命令。

1

gdb支持在线程之间切换以调查所有事情的状态。 Here是一些更多的信息。

0

正如卡尔所说,gdb支持线程。使用GDB的UI(例如Eclipse提供的)可以使这更容易,但是通过键入“info threads”,您可以通过命令行获得线程信息。这将列出线程并允许您通过键入“线程3”等来切换。一旦切换到线程,您可以执行回溯以查看当前线程堆栈和其他您习惯使用的命令线程过程。