为了便于定位故障,程序中注册了若干异常信号的处理函数,利用backtrace和backtrace_symbols记录进程崩溃时的堆栈信息,测试时发现,对于浮点异常,仅能记录两条信息:
./***.bin() [0x18008]
/lib/libc.so.6(__default_sa_restorer_v2+0) [0x403f67f0]
其中第一行为信号处理函数,第二行是c库。
但如果是内存访问异常(段错误),则堆栈记录会非常详细,跟实际调用完全吻合,为啥会有这么大差异呢?是否需要调整编译参数?
多谢。
Jian Zhou:
这个应该和Linux的trace信息设置有关,修改下编译参数试试。