0

我正在使用用于 Linux 嵌入式系统的多线程程序,该程序通过 SEGFAULT 信号非常随机地崩溃。

我需要在不使用 gdb 的情况下找到问题,因为崩溃仅发生在生产环境下,从不在测试期间发生。

我知道程序的符号表,我在主线程中使用 sigaction() 和 backtrace() 但我没有得到足够的信息。回溯线来自 sigaction 函数本身。我允许捕获 50 帧,并在 gcc 中使用 -g 标志进行编译:

Caught segfault at address 0xe76acc
Obtained 3 stack frames.
./mbca(_Z11print_tracev+0x20) [0x37530]
./mbca(_Z18segfault_sigactioniP7siginfoPv+0x34) [0x375f4]
/lib/libc.so.6(__default_rt_sa_restorer_v2+0) [0x40db5a60]

由于程序运行 15 个线程,我想知道信号来自哪个线程,以便限制可能性。仅供参考,主线程创建一个分叉,该分叉创建剩余的 14 个线程。

我怎样才能做到这一点?我可以用我已有的信息做什么?

谢谢大家的帮助

PD:我也尝试过 Core-dump 文件,但它没有生成,因为这个选项没有包含在内核编译中,我无法修改它。

4

0 回答 0