谈谈程序中的bug及原因

[复制链接]
 楼主| tianli1980 发表于 2012-4-6 21:45 | 显示全部楼层 |阅读模式
本帖最后由 tianli1980 于 2012-4-6 21:52 编辑

现代电子产品的功能那么多,其中的程序越来越复杂,开发时期的bug简直无奇不有,有时候我也会估计错误,检查了许多可疑的确方都不是造成bug的主因。在这个状况,有些工程师会一直卡在某个模块或程序文件,看了又看,trace了很多次还是看不出头绪,重点是解bug就像办案一样,你不能期待犯人会来自首,也不能找一个看不顺眼的嫌疑人,硬逼着他要去承认,这样只能是白费工夫,能破案只能立是运气好,debug 时应该要收集“案发现场”的所有蛛丝马迹,推理所有可能的原因,按部就班地把bug抓出来。
其实我们可以将这此bug稍微分类,以下列出当bug表现出什么样的行为,可能是怎么样的问题所导致,虽然不一定百分百准确,但按照这个方向去查,应该是**不离十。
1,如果驱动程序已经通过严格测试,当发生PC OK但机器上NG 的bug时,通常是内存使用不能当的问题。
2,函数返回时死机,应该就是stack overflow的问题。
3,当某块memory被破坏时,可以检查一下map文件,看看这块内存的前后各是什么用途,应该就是邻近的内存使用不发。
4当CPU发生address error时,在某些有address alignment限制的CPU上,可能是在奇数地址操作了偶数个字节,此时应该要检查程序中指针的值。
5,如果heap被破坏了,可在任何可疑的地方调用“检查memory pool完整性”的函数,应该就可以找出程序中破坏heap的地方。
6,在嵌入式系统中,局部变量是没有初始值的,必须由程序设计师自己设定,如果没设定局部变量的初值就直接使用的话,就可能发生每次执行结果都不同的现象。
7,在程序中要用size()取刘变量或数据结构真正占据内存的size,不要自己想当然地直接写数字,否则很容易造成内存操作的错误。
拿起书本 发表于 2012-4-6 22:05 | 显示全部楼层
总结的很好,虽然有时是一个小小的bug可影响却是全方面的。学习了,必须要顶
lolp 发表于 2012-4-6 22:17 | 显示全部楼层
这个很通俗易懂呀 不错不错
lolp 发表于 2012-4-6 22:17 | 显示全部楼层
我也定下子啊
rulu 发表于 2012-4-7 14:00 | 显示全部楼层
这个要好好看看呢
rulu 发表于 2012-4-7 14:00 | 显示全部楼层
细节很重要
shenmu2012 发表于 2012-4-7 16:56 | 显示全部楼层
呵呵,作为一个初来乍到者的体会,基于我在写MSP430单片机程序中的经验,调试BUG比些程序要难的多的啊,其实主要一条“patience”...
huangfeng33 发表于 2012-4-7 23:13 | 显示全部楼层
LZ是个有心人,总结的很好。希望多多发点经验分享。
jxmzzr 发表于 2012-4-8 12:43 | 显示全部楼层
细节决定成败,很好的经验分享,谢谢LZ。
调试一个“bug”比写程序要难,有同感:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部