Inferior 1 (process 663) exited with code 0177

调查过程:

1、使用gdb调试,问题发生时,程序已退出,没有捕获到信号,无法抓到堆栈信息,串口只输出日志:

[Inferior 1 (process 663) exited with code 0177]

2、没有捕获到信号则证明不是崩溃,也不是被kill,推测是主消息循环退出了,使用gdb断点调试,也排除了这个可能 ;

3、推测是某些模块调用了exit接口,使用atexit注册回调,gdb断点调试也排除这个可能 ;

4、重新分析日志,[Inferior 1 (process 663) exited with code 0177],经搜索0177的错误码网上大部人遇到的情况是符号未定义导致程序退出,但他们都有输出错误信息指明具体是哪个符号 未定义;

5、怀疑是系统将应用的串口日志禁用,导致无法输出错误信息,将应用串口日志打开后,应用闪退时就输出如下信息:

/usr/bin/XXXX: symbol lookup error: /usr/lib/libXXXX.so: undefined symbol: XXXX

 

经验教训:

1、其实符号未定义的问题,如果有串口信息是很容易定位到的,但是因为应用的串口日志被禁用导致调查走了很多弯路,所以在调查问题时应先将串口日志找开,避免错过重要信息。另外,后续如有遇到闪退时,gdb无法捕获到信息,就有可能是与此类似的情况。

2、另外发现在编译脚本中,使用了-Wl,--allow-shlib-undefined,导致在编译时未能识别出来问题,该编译参数慎用!

你可能感兴趣的:(那些年填过的坑)