一个随手的举动,导致查了六个半小时bug

项目是工业自动化程序,内容比较复杂,出问题的现象是点击页面的一个按钮之后,在新弹出的页面做修改,保存并返回时页面崩溃,出现段错误。

因为多处使用mhm,我就随手把它放到了最上面

在本地虚拟机始终没有复现问题,接口调用比较深,在send_pattern内部就对当前窗口做了关闭,并重新绘制了上一个窗口,我在绘制接口最后加了一些日志打印,打印正常,导致我以为函数已经顺利结束,无法定位问题发生在哪里。

后来没有思路了决定用gdb调试来看一下窗口关闭后程序又走到了哪里,一看才发现最外层的这个接口还有几行代码没走完。

又接着查最后这五行代码,其中前四行都是简单的设置和读取字段值,最后一行代码在其他地方都能成功执行,还是没有头绪,又加了日志打印width、height、totalline,发现这几个数据变得很大,导致函数里使用的时候出现了越界。

数据变大我以为是某个地方计算出现了问题,查了一圈感觉都不是问题的关键。继续加日志,看这几个数据是在哪里被改变了,还好我这次加日志是新写了一个函数,里面重新获取了mhm,经过对比发现,日志始终是对的,但相邻代码的width旧日志数据竟然不对。但mhm是全局变量,普通数据修改整个项目都可以取到最新值,除非是mhm指针指向发生了改变。至此我终于意识到问题,应该是mhm指针在中间某个环节被重新设置了,经过验证,确实是在若干接口调用后调到了加载接口,重新设置了mhm的地址。

查到问题之后改起来就很简单了

真是每一个举动都要考虑清楚再下手。最后,gdb + 日志,是查问题的好帮手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值