本帖最后由 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,不要自己想当然地直接写数字,否则很容易造成内存操作的错误。 |