如何在多线程c ++运行进程中获取线程跟踪?

时间:2010-03-03 00:59:33

标签: debugging

要在遇到诸如死锁或活锁等情况的情况下调试多线程程序,有哪些有用的实用程序?我想知道gcore是否给出了进程中所有正在运行的threds的堆栈转储,或者只是主线程。另外,gcore是否暂停/终止正在运行的进程?有关调试多线程程序的任何信息都非常有用。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

gdb有一些很好的功能来处理线程。我最喜欢的一个是thread apply。这允许您为多个线程运行相同的命令。

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

thread apply all where

为了解决此问题,命令以thread apply开头。

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

终于来了执行的命令。我使用了where来显示调用堆栈,但是你可以使用你想要的任何命令。