一个lua代码中的bug引起的思考:不要被c++ crash堆栈误导
2014-07-22 11:16
495 查看
最近工作中遇到了一个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一定要头脑清醒,如果搞了半小时还没搞定就先休息吧~
1)出现crash类的bug, 不要第一时间就去查堆栈,先通过排除法逐步找到引起crash的代码。有些情况比如内存越界引起的crash,堆栈就更莫名其妙了。所以一定不要依赖于堆栈。先停下来想一想刚才干了啥。
2)对于lua引起的crash bug,找出可疑代码后打印lua堆栈来分析出问题的调用路径。
3)改bug一定要头脑清醒,如果搞了半小时还没搞定就先休息吧~
相关文章推荐
- 深入分析在Python模块顶层运行的代码引起的一个Bug
- 交接工作不要只分析流程和看静态的看代码呀,一定要动手,增加一个功能,解决一个 BUG什么的,才能真正理解交接的工作内容呀!
- 由一个bug引起的关于list的思考
- 一段旧代码,引起的关于OO中一个问题的思考
- 一个BUG引起的思考
- 一个由于php代码结束符引起的技术bug
- 一个BUG引起的思考
- 深入分析在Python模块顶层运行的代码引起的一个Bug
- MFC6.0 7.0源代码中的一个BUG
- 解决打印代码的一个Bug
- asp.net 的一个新bug. 当你的程序出问题时, 不仅仅要检查自己的代码和逻辑, 还要检查微软的代码, 累吗?
- 一个模块的功能为何要单一,为何代码不要太长
- 修改代码时,请不要引用新的 bug
- 真高兴啊。。。。实际的为开源事业做了点点贡献:),很久前指出的一个lua stdlib的bug得到确认
- 转载 对于技术术语专业化的思考(孟岩)(以后每次遇见一个术语,先查词典,不要被糟糕的中文译名所惑!)
- 一个bug引发的思考 --- ASP.NET页面加载顺序讨论
- 一个正确的c语言链表代码(中间也有些bug)
- JavaScript创建Checkbox,IE6一个弱智bug对代码的影响
- 不要再喊“谁给我一个身份证号码验证的代码”了,脚本之家站长提供了
- 一个bug引发的思考 --- ASP.NET页面加载顺序讨论