【问题标题】:How to debug stuck thread?如何调试卡住的线程?
【发布时间】:2021-07-02 03:22:49
【问题描述】:

我有一个在 Linux 下运行的多线程 C 进程。偶尔,即:每月几次,其中一个线程挂起(它没有达到放置在每个线程末尾的睡眠)。

如何调试它?当线程卡住时,有没有办法知道代码的哪一部分正在执行?

【问题讨论】:

  • 你刚刚为我打开了一个全新的世界!我不知道我可以将 gdb 附加到正在运行的进程,也不知道核心转储的存在。谢谢!
  • 很高兴能提供帮助。我将其转换为答案。

标签: c linux multithreading debugging


【解决方案1】:

在 Linux 上,您可以使用 kill -11 杀死它,然后查看 coredump。您也可以attach a debugger 看看它目前在做什么。

您还可以添加日志记录以查看它在做什么。

【讨论】:

    【解决方案2】:

    您可以使用 GDB 调试核心转储。

    #~ gdb <source binary> <coredump file>

    在gdb进程中,回调trace获取函数trace导致crash。

    gdb> bt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多