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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VxWorks调试步骤如下: 1. 确定调试目标(target)和调试主机(host)。目标是运行VxWorks的嵌入式设备,主机是运行调试器的计算机。 2. 连接目标和主机。可以使用串口、以太网、USB等方式连接目标和主机。 3. 配置目标和主机的网络设置。确保主机和目标在同一个网络中,并且可以相互通信。 4. 在主机上启动调试器。常用的VxWorks调试器有Wind River Workbench和Tornado。 5. 在调试器中配置连接目标的参数。包括目标的IP地址、端口号、连接方式等。 6. 连接目标。调试器会尝试连接目标,并且在目标上启动VxWorks调试代理。 7. 在调试器中选择需要调试的程序。可以选择已有的程序,也可以创建新的程序。 8. 在调试器中设置断点和监视点。断点可以在程序执行到指定位置时停止,监视点可以在变量或内存地址发生变化时停止。 9. 启动调试调试器会将程序下载到目标并启动执行。当程序执行到断点或监视点时,会自动停止。 10. 在调试器中查看程序状态和变量值。可以查看程序当前的调用栈、变量值、寄存器值等信息,以便分析程序问题。 11. 修正程序问题。可以在调试器中修改变量值、单步执行、调用函数等方式修正程序问题。 12. 退出调试。当程序调试结束时,可以在调试器中退出调试,并且关闭与目标的连接。 以上是VxWorks调试的基本步骤,具体操作步骤可能会因为调试器版本、目标硬件、连接方式等不同而有所区别。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值