如何在大型多线程C程序中查找SEGFAULT的原因?

问题描述

我正在为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文件,但由于内核编译中未包含此选项,因此无法对其进行修改,因此未生成文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)