一个lua代码中的bug引起的思考:不要被c++ crash堆栈误导

最近工作中遇到了一个bug,程序crash了,但c++堆栈信息完全不相关,于是就顺着堆栈查代码,下断点,但是断点在crash之前还断不到,足够奇怪。并且屏蔽了某个功能后还是crash,但堆栈又完全不同了,加班搞了会儿,头痛欲裂,放弃了先下班回家。第二天早早来,头脑清醒,理清思路,逐步缩小范围,很快解决了。其实这个bug如果是在纯c++之中应该是很好查的,但是堆栈不对是由于bug出在lua中,c++堆栈只能显示到lua调用的情况,而在c++和lua混合代码中,控制流在lua和c++之间流动,导致了lua调用可能出现在不同的c++堆栈顶端。而两次堆栈不同是由于不同的c++代码最终调用到了lua的引起crash的代码。解决这个bug最后是靠逐步缩小范围并打印lua的调用堆栈。从这个bug中我总结几点教训:

1)出现crash类的bug, 不要第一时间就去查堆栈,先通过排除法逐步找到引起crash的代码。有些情况比如内存越界引起的crash,堆栈就更莫名其妙了。所以一定不要依赖于堆栈。先停下来想一想刚才干了啥。

2)对于lua引起的crash bug,找出可疑代码后打印lua堆栈来分析出问题的调用路径。

3)改bug一定要头脑清醒,如果搞了半小时还没搞定就先休息吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值