【问题标题】:How to find which thread is stuck如何找到卡住的线程
【发布时间】:2016-06-12 18:36:22
【问题描述】:

我正在处理线程并且我的一个(或多个)线程被卡住并且永远不会结束。问题是我找不到哪一个。

所以我想知道是否有办法找到它ID,与PS Linux 命令中显示的 ID 相同。如果没有办法,我怎么能找到哪个线程被卡住了?

Obs:已经检查了pthread_self(),这不是我要找的。​​p>

【问题讨论】:

  • ps 没有列出没有特殊开关的线程。您确定要线程而不是进程吗?
  • 请看以下信息:stackoverflow.com/help/mcve
  • @EugeneSh。我想是的...当我使用字符& 进行编译时,我能够给出PS 命令,并且我可以看到我的可执行文件列出了一个pid。我只是想知道是否有办法找到哪个线程被卡住了......
  • pid = process id。不是线程。你最好详细描述你的问题。不是您认为可以解决原始问题的问题。见 -XY-problem

标签: c linux multithreading


【解决方案1】:

使用 GDB 调试器我们可以找出哪个线程处于阻塞状态。

  1. 首先尝试使用调试符号编译您的代码。
  2. gdb your_file_executable
  3. 放一些断点(你会知道准确地放置 bp 的位置)
  4. info threads

“信息线程”将提供有关生成/运行的线程的信息。 w

【讨论】:

  • 我发现另一个有用的命令是thread apply all bt - 它打印每个线程的堆栈跟踪,让您可以轻松找到卡住的那个。
  • 也可以这样做:gdb program -p pid
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
相关资源
最近更新 更多