【问题标题】:Linux: C: How can I find which thread has crashedLinux:C:我怎样才能找到哪个线程崩溃了
【发布时间】:2019-02-06 03:41:02
【问题描述】:

我有一个有 10 个线程的进程。我想找出进程何时崩溃,哪个线程导致了崩溃。 有没有办法在运行时做到这一点。我的意思不是在整个过程退出之后。 我不想使用信号处理程序。

谢谢, 王子

【问题讨论】:

    标签: multithreading crash


    【解决方案1】:

    如果您有核心文件,

    gdb path/to/executable path/to/core/file

    (gdb) thread apply all bt full

    将为您提供所有线程的堆栈跟踪。

    如果您没有核心文件,

    在 gdb 中运行您的可执行文件

    gdb path/to/executable

    (gdb) r

    或者如果你有命令行参数,第二个命令是

    (gdb) r yourarg1 yourarg2

    然后,当应用程序崩溃时

    (gdb) thread apply all bt full

    如果您想生成核心文件,在运行崩溃的可执行文件之前,您可以在终端中执行 ulimit -c unlimited 以将核心文件大小设置为无限。

    要在完成后退出 gdb,只需在 (gdb) 提示符内输入 q 即可退出。

    【讨论】:

    • 谢谢。但我想以编程方式找出这一点。可能来自另一个正在运行的进程。
    【解决方案2】:

    考虑将 10 个线程中的每一个都放入单独的进程中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2021-04-30
      相关资源
      最近更新 更多