4. 调试应用程序

任务目标

在VxWorks Workbench中启动调试会话,为应用程序源码设置断点,通过单步执行(Step Over / Step Into)观察局部变量在每条语句执行后的值变化,验证程序控制流与变量更新逻辑。

环境与前置条件

  • VxWorks Workbench 3.x/4.x(含Wind River Debugger)
  • 已创建可调试的VxWorks应用工程(如app_debug),编译选项需包含-g调试信息
  • 已连接目标机(模拟器或真实板卡),且目标机已启动VxWorks镜像

示例程序

创建文件debug_demo.c并加入当前工程:

```c /* debug_demo.c - 断点与单步调试示例 */ #include int compute(int base, int step) { int sum = 0; int i; for (i = 0; i < step; i++) { sum += base + i; /* 在此行设置断点 */ } return sum; } int main(void) { int result; int a = 3; int b = 4; result = compute(a, b); /* 在此行设置断点 */ printf("result = %d\n", result); return 0; } ```

调试操作步骤

  1. 启动调试会话:在Workbench中右键点击工程 → Debug As → VxWorks Debug,选择目标机连接后启动。
  2. 设置断点:在源码编辑器中,双击第8行(sum += base + i;)左侧灰色区域,或右键 → Toggle Breakpoint。同样在第16行(result = compute(a, b);)设置第二个断点。
  3. 运行到第一个断点:点击调试工具栏的Resume(F8)。程序停在main函数第16行,此时a=3、b=4已赋值。
  4. 单步进入函数:点击Step Into(F5),进入compute函数,停在sum = 0行。
  5. 单步跳过循环体:连续点击Step Over(F6),观察i从0递增至3,sum依次变为3、7、12、18(当i=3时循环结束)。
  6. 观察变量:在Variables视图中实时查看sum、i、base、step的值;也可选中变量名右键 → Watch添加到表达式视图。
  7. 结束调试:点击Resume让程序运行完,控制台输出result = 18,然后点击Terminate停止调试会话。

验证方法与判定标准

  • 程序能停在两个断点处,且调用栈显示当前位于main或compute对应行。
  • 单步执行时,Variables视图中i从0逐步变为1、2、3,sum按sum += base + i正确累加。
  • 循环结束后sum的最终值为18(即3+4+5+6),与代码逻辑一致。
  • 最终控制台输出result = 18,程序正常退出无异常。
常见问题:若断点无效,检查工程编译属性中是否启用-g调试符号;若单步时源码与汇编不对应,确认下载到目标机的镜像与当前工程为同一构建版本。
断点与单步执行流程 main() 入口 断点①: result = compute(3,4) Step Into → compute() 断点②: sum += base + i Step Over ×4 → 循环结束 Variables 视图 i = 0 → 1 → 2 → 3 sum = 0 → 3 → 7 → 12 → 18 (循环结束) base = 3 (不变) step = 4 (不变) 预期输出 result = 18 sum = 3+4+5+6 = 18