程序跑飞的如何查问题

在下这厢有礼了

最近一直在调试公司的代码,调的我有点慢,给自己总结一下

我是在FPGA上调试,一个通信交互的工程。

我遇到程序跑飞的无非是三种情况

1. 数组越界:就是数组的大小只有array[100],但是那你用了array[500],产生越界,越界使用的地址,因为没有分配,当程序跑到这块就会跑飞,(现象是进入了一个SVC_Handler异常软件中断,是一个死循环)

解决办法:找到哪一步产生的越界,然后设置断点,单步执行,找出越界的位置,查看上下文,看是什么原因产生,对应修改。

2. 指针使用未初始化:定义了一个指针,未初始化就直接使用,程序跑飞。

解决办法:u_int32 *p = 0;给赋值0,就可以解决。

3. memset函数,会导致跑飞

但是解决办法目前没有找到,因为我调试的程序这块的错误不是每次发生,是偶然会有,目前还在定位。

4. printf函数调用跑飞

解决办法:将printf变成xil_printf

 

别人的错误:

5.堆栈溢出,即分配的堆栈空间不足

6.页表映射错误

学习调跑飞的经验:

遇到跑飞莫着急 ,看他是否是必然,找准断点单步行,判断越界初始化, 实在不行找谷歌。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值