要调试多线程程序,在出现死锁或活锁等情况时,有哪些有用的实用程序?我想知道gcore是给出了进程中所有正在运行的线程的堆栈转储,还是只给出了主线程。另外,gcore是否会挂起/终止正在运行的进程?任何有关调试多线程程序的信息都将非常有用。
发布于 2010-03-03 09:12:21
gdb有一些用于处理线程的很好的特性。我最喜欢的一个是thread apply。这允许您对多个线程运行相同的命令。
例如,如果您想要获取所有线程的回溯,您可以使用以下命令:
thread apply all where要详细分析这一点,该命令以thread apply开头。
接下来是线程列表。在这里,我使用关键字all将其应用于进程中的每个线程。您还可以使用以空格分隔的GDB线程ids列表(thread apply 1 2 3 command)。
最后是要执行的命令。我使用了where,它向您显示了调用堆栈,但是您可以使用任何想要的命令。
发布于 2010-03-03 09:02:09
gdb支持在线程之间切换,以调查正在进行的所有操作的状态。Here是一些更多信息。
发布于 2010-03-03 09:08:23
正如Carl所说,gdb支持线程。使用用于GDB的UI (比如Eclipse提供的UI)可以简化这一过程,但是您可以在通过命令行运行时输入"info thread“来获取线程信息。这将列出线程,并允许您通过键入"thread 3“等进行切换。一旦切换到线程,您可以进行回溯,以便查看当前线程堆栈和其他您习惯用于单线程进程的命令。
https://stackoverflow.com/questions/2368109
复制相似问题