VxWorks调试备忘录

Posted 布列瑟农的秋天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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。

以上是关于VxWorks调试备忘录的主要内容,如果未能解决你的问题,请参考以下文章

VxWorks常用命令(备忘)

VxWorks常用命令(备忘)

无工作台的 VxWorks 调试

VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘

VxWorks Fuzzing 之道:VxWorks 工控实时操作系统漏洞挖掘调试与利用揭秘

vxWorks 调试组件和命令