【随笔向】记一次由于中断优先级设置不正确和滥用全局变量导致的bug

记bug总是一件很难的事情,因为很多时候出现bug很难解决的原因是你不知道这个bug是因为什么而出现的,但是当你解决了bug,发现了问题原因所在的时候,这个bug又变得理所当然的“简单”。因此,可能对遇到和我有同样的bug的人因为不会往“全局变量”或“中断优先级”这些关键字寻找问题吧,我的随笔也很难被这些遇到和我一样问题的人找到。所以就是当个随笔写了

这次就是一个队友遇到的摸不着头脑的“玄学”bug了。

在进行调试的时候发现中断里面发现中断的逻辑完全不对,比如

if(num==1)
{
//Do something A
}

在代码段A中因为变量不正确而导致程序跑死,可是在这个代码段中打断点竟然发现num不是1而是一些其他的数字,同时也发现这个情况下的其他变量也很不正常,最终导致了代码段A跑死了。

最后发现的原因是:变量num和一些其他变量因是全局变量或是全局变量的指针,然后这些全局变量会在一个比当前中断优先级更高的中断被修改。因此有很小一部分的概率会发生在当前中断下num==1时进入了代码段A,但是未执行完成就被更高优先级的中断打断了并修改了全局变量的值,然后回到当前中断后因为数据完全变化了而导致发生了逻辑的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值