背景说明
今天遇到一个偶现崩溃,因为复现概率非常低,并且出现的时候没有收集coredump信息,因此没有去定位,今天复现了两次,终于被我拿到完整的堆栈信息,堆栈信息如下
分析过程
1.打开堆栈日志,发现0号位置没有具体的函数信息,只能先看1号位置的堆栈信息,通过打印变量,发现都很正常;
2.尝试能否打印出来0号堆栈的信息,尝试安装debuginfo-install,发现安装不了;
3.非常迷茫,没有办法继续定位
4.开始怀疑logger->handler这个属性有问题,我知道logger->handler这是一个函数指针,打印gtc_stderr_logger函数指针,发现跟logger->handler不同。
5.继续打印logger对象,这个对象也比较奇怪,level=1990817720不是一个正常的值,难道这个对象已经被破坏了?
6.gdb调试程序,发现启动的时候logger->handler的值就是gtc_stderr_logger函数指针
7.确认问题,logger对象是野指针。(破坏的原因是我是多线程程序,logger对象在子线程被释放了,主线程继续使用时就出现崩溃)
总结
如果再次遇到堆栈中出现??,可以先从有效信息开始分析,基本上就是有效信息那边出现问题了,后面分析崩溃堆栈,需要仔细,每个变量都要仔细检查一下,
这次分析这么久,是因为自己观察不细致导致的,因此写下该篇博客,来告诫自己分析问题需要仔细认真。
标签:函数指针,Missing,separate,信息,handler,崩溃,堆栈,debuginfos,logger From: https://www.cnblogs.com/zhanggaofeng/p/18253979