"这篇文档详细介绍了在vxWorks操作系统中使用shell进行调试的各种方法,包括设置和管理断点、查看任务信息、以及与内存和信号量相关的调试操作。这些技巧对于理解vxWorks系统的运行机制和排查问题至关重要。" vxWorks是一个实时操作系统(RTOS),其shell提供了丰富的命令行调试工具,使得开发者能够对系统进行深入的分析和调试。以下将详细解释这些调试方法: 1. **设置断点**: - 使用`b`命令可以设置断点,例如`b 函数名`或`b 地址`。如果知道任务地址,也可以指定为`b 函数地址,任务地址`。 - `b`命令用于列出所有已设置的断点。 - `bd 地址`用于删除指定的断点,而`bdall`会清除所有断点。 - `bh`则允许设置硬件断点,比如在PPC860和PPC604这样的平台上,可以设置读写内存的断点。 2. **查看任务信息**: - `ti`命令用于查看当前被中断任务的详细信息,包括任务ID、状态、寄存器值等。r3寄存器通常保存this指针地址,r4及其后的寄存器存储函数参数值。当函数返回时,r3则包含返回值。 - 示例中的输出展示了任务的堆栈信息、异常堆栈、处理器模式、事件状态以及寄存器值等。 3. **内存操作**: - vxWorks shell提供了内存查看(`mem`)和写入(`memw`)命令,可以帮助开发者检查内存内容或修改内存值,这对于追踪内存问题非常有用。 4. **信号量调试**: - 在vxWorks中,可以通过`semStat`命令查看信号量的状态,包括其计数值、等待任务列表等,这对于理解和解决多任务同步问题至关重要。 5. **其他调试命令**: - `ps`命令用于列出系统中的所有任务,这有助于定位和跟踪特定任务。 - `taskInfo`命令提供更详细的任务信息,如优先级、栈大小等。 - `sysTrace`可用于系统跟踪,记录系统调用和其他关键事件,帮助分析系统行为。 通过熟练掌握这些vxWorks shell调试方法,开发者可以有效地诊断和解决问题,提高系统开发和维护的效率。对于实时系统来说,快速定位和解决问题的能力是极其重要的,vxWorks shell提供的这些工具为此提供了强大的支持。
(1)b设置断点
设置的方法有:“b 函数名”
“b 地址” (函数地址或者代码行地址,取决于看懂汇编)
“b 函数地址,任务地址” (i列出所有的任务,找到任务地址)
"b" 显示全部断点
"bd 地址" 删除断点
"bdall" 删除全部断点
"bh" 设置硬件断点, 如:PPC860就可以,PPC604就可以设置读写内存的断点。
(2)ti查看当前任务的信息
断点断住时,ti显示断住任务寄存器信息,r3为this指针地址,r4后续依次为函数的参数值
cret函数返回时,r3为函数的返回值
举例
-> ti 0x8d90240
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tXxxx 5d30d8 8d90240 160 PEND 1f85680 8d8ff80 0 0
task stack: base 0x8d90240 end 0x8d70240 size 131072 high 12176 margin 118896
exc. stack: base 0x8d91430 end 0x8d90500 start 0x8d91500
exc. stack: size 3888 high 496 margin 3392
VX_SUPERVISOR_MODE VX_DEALLOC_TCB VX_DEALLOC_EXC_STACK VX_FP_TASK VX_SPE_TASK
VxWorks Events
--------------
Events Pended on : Not Pended
Received Events : 0x0
Options : N/A
r0 = 0x020a4434 sp = 0x08d8ff80 r2 = 0x028203ec
r3 = 0x00000000 r4 = 0x0488f5c0 r5 = 0x00000000
r6 = 0x00000000 r7 = 0x00000000 r8 = 0x00000000
r9 = 0x020a43f8 r10 = 0x00000000 r11 = 0x04853b40
r12 = 0x00000000 r13 = 0x02f2ba80 r14 = 0x00000000
r15 = 0x00000000 r16 = 0x00000000 r17 = 0x00000000
r18 = 0x00000000 r19 = 0x00000000 r20 = 0x00000000
r21 = 0x00000000 r22 = 0x00000000 r23 = 0x00000000
r24 = 0x00000000 r25 = 0x00000000 r26 = 0xffffffff
r27 = 0x02f2b990 r28 = 0x00000400 r29 = 0x08d91530
r30 = 0x02029200 r31 = 0xffffffff msr = 0x02029200
lr = 0x020a4434 ctr = 0x020a43f8 pc = 0x01f85680
cr = 0x28000844 xer = 0x20000000 pgTblPtr = 0x00000000
asid = 0x00000001 spefscr = 0x00000000
value = 0 = 0x0
->
(3)lkup和lkAddr符号查找
lkup:符号到地址,例如:lkup "bdmain"
lkAddr:地址到符号,例如:lkAddr 0x004a5740
剩余15页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全