头文件不匹配导致的崩溃问题

本文记录了一次由于头文件和.a库文件不匹配导致的运行时崩溃问题。在调试过程中,发现虚函数错位,通过检查函数调用堆栈并更新头文件和库文件后,问题得到解决。当头文件更新而库文件未更新,新增的虚函数会导致虚函数表错乱,从而引发崩溃。解决方法是确保头文件和库文件同步更新。
摘要由CSDN通过智能技术生成


虽然问题解决了,但其中的奥秘还不甚了解,这里只是暂时做一个存档。

        今天项目中遇到一个崩溃问题,崩溃点随机,调试的时候,单步跟踪调试也很诡异,处理了好一段时间也没有解决 ,然后组长说该项目其他人也在维护,他们修改了某个模块,但是头文件好像没有上传,更新头文件后,重新编译运行,果然不再崩溃了,bug解决了。

         总结:

         问题的原因是:头文件和源文件不匹配导致的,但是能够编译过。

         这样的问题这是第二次遇到,在遇到运行时崩溃,崩溃点随机,且单步跟踪调试代码比较诡异(如感觉调试时代码不匹配,某个变量值发生莫名的变化(赋值之后不应该变化)等)的现象时,可以考虑是不是头文件与库文件或是源文件不匹配的情况。但是头文件不匹配会怎样,原理是什么还没有搞明白。


以下是转载:原文链接:http://blog.csdn.net/zdl1016/article/details/8690061

头文件和.a(库文件不匹配)导致虚函数错位,进而导致的bug

头文件和.a(库文件不匹配)导致虚函数错位,进而导致的bug

该bug的快速定位技巧
    bt查看函数调用堆栈. 如果堆栈的顺序错乱, 则可能是虚函数表错乱导致.
    本例中, GetTPLContent 的上层很明显不应该是 DealInput, 因为DealInput没有调用GetTPLContent

故障回顾:

    某日遇到一个奇葩bug, 进程core, 查看堆栈, core的位置没有任何异常, 在一个不可能出问题的地方出错了. 只根据core文件在生产环境无法排查.
    在开发机生把cgi编译成可执行文件, 用gdb跟踪, 发现在 单步跟进 BeforeProcess() 函数时, 却意外的跳到了 GetTPLContent()函数接下来就是core了.

中断现场如下:

    rogram received signal SIGSEGV, Segmentation fault.
    [Switching to Thread -1211028832 (LWP 10060)]
    0xb7ef2422 in std::string::compare () from /usr/lib/libstdc++.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值