4. 使用Wind River Workbench调试
任务目标
在Wind River Workbench中连接VxWorks目标机,通过设置断点、单步执行和变量监视,完成一个用户态应用的在线调试闭环。本案例以一个计算数组元素平方和的简单任务为载体,演示Workbench调试器的核心操作流程。
环境与前置条件
- 已安装Wind River Workbench(含VxWorks 7或6.9目标机镜像)
- 目标机已启动并运行VxWorks,通过网络与主机连通
- 已创建可下载内核模块(DKM)类型的应用工程,编译通过
示例代码
创建文件 debug_demo.c,代码如下:
调试操作步骤
- 启动调试会话:在Workbench中右键点击DKM工程 →
Debug As→VxWorks DKM Application。选择目标机连接后,应用被下载到目标机内存并停在入口处。 - 设置断点:在
debug_demo.c第8行(sum += arr[i] * arr[i])左侧双击设置断点,断点标记变为实心圆。 - 运行到断点:点击
Resume(F8),程序运行至第8行暂停。此时i=0,sum=0。 - 单步执行:点击
Step Over(F6)执行当前行,sum变为1(即1*1)。再点击Step Into(F5)可进入被调函数(本例中无其他函数调用,效果同Step Over)。 - 观察变量:在
Variables视图中展开arr可查看5个元素;右键sum选择Add Watch将其加入Expressions视图,持续跟踪其变化。全局变量g_result可在Expressions视图中手动添加。 - 继续执行:再次点击
Resume,程序在第8行第二次暂停(i=1)。观察sum变为5(1+4)。重复Resume直至循环结束。 - 结束调试:点击
Resume让程序运行完printf,在目标机控制台看到输出sum of squares = 55。点击Terminate结束会话。
验证方法
- 断点命中:每次点击Resume后,调试器在第8行暂停,且
i值依次为0、1、2、3、4,共命中5次。 - 变量值正确:单步执行后
sum值依次为1、5、14、30、55,与平方和累加逻辑一致。 - 最终输出:目标机控制台打印
sum of squares = 55,与代码逻辑直接对应。
常见问题
- 断点无法命中:确认编译时未开启优化(
-O0),且下载的是Debug版本镜像。 - 变量显示“out of scope”:局部变量
sum仅在square_sum函数内有效,需在断点命中时查看。 - 连接超时:检查目标机IP与Workbench中配置的Target Server是否一致,使用
ping验证网络连通。