打印

谈谈程序中的bug及原因

[复制链接]
1717|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
我也定下子啊

使用特权

评论回复
5
rulu| | 2012-4-7 14:00 | 只看该作者
这个要好好看看呢

使用特权

评论回复
6
rulu| | 2012-4-7 14:00 | 只看该作者
细节很重要

使用特权

评论回复
7
shenmu2012| | 2012-4-7 16:56 | 只看该作者
呵呵,作为一个初来乍到者的体会,基于我在写MSP430单片机程序中的经验,调试BUG比些程序要难的多的啊,其实主要一条“patience”...

使用特权

评论回复
8
huangfeng33| | 2012-4-7 23:13 | 只看该作者
LZ是个有心人,总结的很好。希望多多发点经验分享。

使用特权

评论回复
9
jxmzzr| | 2012-4-8 12:43 | 只看该作者
细节决定成败,很好的经验分享,谢谢LZ。
调试一个“bug”比写程序要难,有同感:handshake

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝