VxWorks调试备忘录

1. 系统出错打印出堆栈时,不一定是打印堆栈附近的代码报错了,有可能是前面代码报错了,然后随机延时了一段时间才把堆栈

    信息打印出来了,需要加在前面代码中不断缩小范围排查;

2. 中断处理例程里面尽量不要使用memset去初始化数据结构,否则有可能会导致系统卡死;

3. 中断处理例程里面不要使用for循环去初始化数据结构,否则会导致系统卡死;

4. 中断处理例程里面不要使用new X(),单参数的new()会调用malloc(),而malloc有可能会进入睡眠,从而造成死锁;

5. 初始化数组时,使用int msgq_item[4] = { 0 }这样方式,编译器可能只初始化了msgq_item[0]等于0,其他几个成员可能没有初

    始化,因此有出现异常的风险。需要分别逐个初始化,msgq_item[0] = 0,msgq_item[1] = 0, msgq_item[2] =

    0, msgq_item[3]= 0,这样写比较严谨些。

6. 在中断处理例程里面打印信息,建议使用logMsg,使用printf打印可能会导致系统卡死。

7. 当出现堆栈错误时,将错误指向的地址复制到终端命令行上执行,也许会显示出具体的某个函数+偏移。如果是0地址,那么肯

    定是代码里面出现NULL指针操作了,需要自己加log定位。

8. 编写代码时,不要使用goto语句,因为workbench工具链对goto语句支持不太友好,简单一点的goto语句没问题,复杂一点的

    编译会报错。

9. 命令行终端可以执行“函数名+参数”,有些时候想验证接口的时候可以通过这种方式验证结果。

10. 在中断上下文中使用memset要格外注意,memset可能会造成系统卡死,或者造成函数参数无法正常使用,例如参数无法打

      印,一打印就卡死。此时,如果出现卡死问题,可以排查下是不是memset引起的,如果没有更好的解决办法,可以暂时使用

      for循环来代替memset。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值