首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多线程c++运行进程中获取线程跟踪?

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

Stack Overflow用户
提问于 2010-03-03 08:59:33
回答 3查看 511关注 1票数 1

要调试多线程程序,在出现死锁或活锁等情况时,有哪些有用的实用程序?我想知道gcore是给出了进程中所有正在运行的线程的堆栈转储,还是只给出了主线程。另外,gcore是否会挂起/终止正在运行的进程?任何有关调试多线程程序的信息都将非常有用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-03 09:12:21

gdb有一些用于处理线程的很好的特性。我最喜欢的一个是thread apply。这允许您对多个线程运行相同的命令。

例如,如果您想要获取所有线程的回溯,您可以使用以下命令:

代码语言:javascript
复制
thread apply all where

要详细分析这一点,该命令以thread apply开头。

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

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

票数 0
EN

Stack Overflow用户

发布于 2010-03-03 09:02:09

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

票数 1
EN

Stack Overflow用户

发布于 2010-03-03 09:08:23

正如Carl所说,gdb支持线程。使用用于GDB的UI (比如Eclipse提供的UI)可以简化这一过程,但是您可以在通过命令行运行时输入"info thread“来获取线程信息。这将列出线程,并允许您通过键入"thread 3“等进行切换。一旦切换到线程,您可以进行回溯,以便查看当前线程堆栈和其他您习惯用于单线程进程的命令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2368109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档