【发布时间】:2019-02-06 03:41:02
【问题描述】:
我有一个有 10 个线程的进程。我想找出进程何时崩溃,哪个线程导致了崩溃。 有没有办法在运行时做到这一点。我的意思不是在整个过程退出之后。 我不想使用信号处理程序。
谢谢, 王子
【问题讨论】:
标签: multithreading crash
我有一个有 10 个线程的进程。我想找出进程何时崩溃,哪个线程导致了崩溃。 有没有办法在运行时做到这一点。我的意思不是在整个过程退出之后。 我不想使用信号处理程序。
谢谢, 王子
【问题讨论】:
标签: multithreading crash
如果您有核心文件,
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 即可退出。
【讨论】:
考虑将 10 个线程中的每一个都放入单独的进程中。
【讨论】: