在下这厢有礼了
最近一直在调试公司的代码,调的我有点慢,给自己总结一下
我是在FPGA上调试,一个通信交互的工程。
我遇到程序跑飞的无非是三种情况
1. 数组越界:就是数组的大小只有array[100],但是那你用了array[500],产生越界,越界使用的地址,因为没有分配,当程序跑到这块就会跑飞,(现象是进入了一个SVC_Handler异常软件中断,是一个死循环)
解决办法:找到哪一步产生的越界,然后设置断点,单步执行,找出越界的位置,查看上下文,看是什么原因产生,对应修改。
2. 指针使用未初始化:定义了一个指针,未初始化就直接使用,程序跑飞。
解决办法:u_int32 *p = 0;给赋值0,就可以解决。
3. memset函数,会导致跑飞
但是解决办法目前没有找到,因为我调试的程序这块的错误不是每次发生,是偶然会有,目前还在定位。
4. printf函数调用跑飞
解决办法:将printf变成xil_printf
别人的错误:
5.堆栈溢出,即分配的堆栈空间不足
6.页表映射错误
学习调跑飞的经验:
遇到跑飞莫着急 ,看他是否是必然,找准断点单步行,判断越界初始化, 实在不行找谷歌。