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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章