现在我们将bug稍作分类,以下是当bug表现出什么样的行为,可能是怎么样的问题所导致的,虽然不定是百分百准确,但按照这个方向去查,应该是**不离十了。
如果驱动程序已经通过严格测试,当发生PC OK但机器上的NG的bug时,通常是内存使用不当的问题。
函数返回时死机,应该是 stack overflow 的问题。
当某块memory被破坏时,可以检查一下map文件,看看这块内存的前后各是什么乃父,应该就是邻近的内存使用不当。
当CPU发生address error时,在某些有address alignment 限制的CPU上,可能是在奇数地址操作了偶数个字节,此时应该要检查程序中指针的值。
如果heap被破坏了,可在任何可疑的地方调用“检查memory pool完整性”的函数,应该就可以找操作了偶数个字节,此时应该要检查程序中指针的值。
在嵌入式系统中,局部变量是没有初始值,必须由程序设计师自己设定的,如果没设定局部变量的初值就直接使用的话就可能发生每次执行结果不同的现象。
在程序中要用sizeof()取得变量变量或数据结构真正占据内存的size,不要自己想当然地直接写写数字,否则很容易造成内存操作的错误。 |