Debugging 如何在多线程c++;运行过程?
在死锁或活锁等情况下调试多线程程序时,有哪些有用的实用程序?我想知道gcore是提供进程中所有运行thred的堆栈转储,还是只提供主线程。另外,gcore是否挂起/终止正在运行的进程?关于调试多线程程序的任何信息都将非常有用。Debugging 如何在多线程c++;运行过程?,debugging,Debugging,在死锁或活锁等情况下调试多线程程序时,有哪些有用的实用程序?我想知道gcore是提供进程中所有运行thred的堆栈转储,还是只提供主线程。另外,gcore是否挂起/终止正在运行的进程?关于调试多线程程序的任何信息都将非常有用。gdb支持在线程之间切换,以调查正在进行的一切的状态。是一些详细信息。gdb支持在线程之间切换,以调查正在发生的一切的状态。更多信息。如Carl所述,gdb支持线程。为GDB使用UI(比如Eclipse提供的UI)使这变得更容易,但是在通过命令行运行时,您可以通过键入“in
gdb
支持在线程之间切换,以调查正在进行的一切的状态。是一些详细信息。gdb
支持在线程之间切换,以调查正在发生的一切的状态。更多信息。如Carl所述,gdb支持线程。为GDB使用UI(比如Eclipse提供的UI)使这变得更容易,但是在通过命令行运行时,您可以通过键入“info threads”来获取线程信息。这将列出线程,并允许您通过键入“thread 3”等进行切换。一旦切换到线程,您可以进行回溯,以查看当前线程堆栈以及您用于单线程进程的其他命令 如Carl所述,gdb支持线程。为GDB使用UI(比如Eclipse提供的UI)使这变得更容易,但是在通过命令行运行时,您可以通过键入“info threads”来获取线程信息。这将列出线程,并允许您通过键入“thread 3”等进行切换。一旦切换到线程,您可以进行回溯,以查看当前线程堆栈以及您用于单线程进程的其他命令 gdb有一些很好的处理线程的特性。我的最爱之一是线程应用
。这允许您对多个线程运行相同的命令
例如,如果希望获得所有线程的回溯跟踪,可以使用以下方法:
thread apply all where
要解决这个问题,命令以threadapply
开头
接下来是线程列表。在这里,我使用关键字all
将其应用于进程中的每个线程。您还可以使用以空格分隔的gdb线程ID列表(threadapply123command
)
最后是要执行的命令。我使用了
where
,它显示了调用堆栈,但是您可以使用任何您想要的命令。gdb有一些很好的处理线程的功能。我的最爱之一是线程应用
。这允许您对多个线程运行相同的命令
例如,如果希望获得所有线程的回溯跟踪,可以使用以下方法:
thread apply all where
要解决这个问题,命令以threadapply
开头
接下来是线程列表。在这里,我使用关键字all
将其应用于进程中的每个线程。您还可以使用以空格分隔的gdb线程ID列表(threadapply123command
)
最后是要执行的命令。我使用了where
,它显示了调用堆栈,但您可以使用任何您想要的命令