1. 调试工程环境搭建
VxWorks Workbench 是风河公司为 VxWorks 提供的集成开发环境,它把工程管理、交叉编译、目标机连接、调试器、系统查看器(System Viewer)等能力整合在同一个基于 Eclipse 的界面中。要开始调试,必须先让“宿主机—交叉工具链—目标机”这条链路完整打通:Workbench 装在宿主机上,交叉编译器把源码编译成目标机架构的可执行文件,调试器通过某种物理通道(网口、串口、JTAG)与目标机上的调试代理通信。本章围绕这条链路,讲清安装、连接配置、调试器设置和第一个可调试工程的创建过程。
一、安装前的准备与版本匹配
Workbench 的安装不是“下一步到底”就完事,最容易出问题的地方是版本匹配。需要确认三件事:目标机运行的 VxWorks 版本、Workbench 版本、以及目标机 CPU 架构(如 ARM Cortex-A9、PowerPC e500、x86 等)。Workbench 通常以安装包加许可证文件(license)的形式提供,安装时选择与 VxWorks 源码包对应的组件,包括交叉编译器(GNU 或 Diab)、目标机代理(target agent)、以及对应的 BSP 支持。
安装路径建议不含中文和空格,例如 C:\WindRiver\workbench-3.3。安装完成后,首次启动会提示指定 workspace(工作空间),它是所有工程和配置的存放目录,同样建议使用纯英文路径。许可证通过 License Manager 导入,导入后可在 Help → About 中确认授权状态。
二、目标机连接配置
目标机连接的本质是:宿主机上的调试器要找到目标机上的 WDB target agent(调试代理)。常见连接方式有三类:
- 网络连接(Ethernet):目标机启动后运行 WDB agent,监听 UDP 端口(默认 17185 附近)。宿主机通过 IP 直连或经交换机访问。这是最常用的方式,速度快,适合应用级调试。
- 串口连接(Serial):通过 COM 口连接,速率较低,常用于目标机网络尚未配置好的早期阶段,或用于查看启动日志。
- JTAG/硬件调试器:如 WindRiver ICE、Lauterbach 等,用于 BSP 移植、启动代码调试等网络和串口都不可用的场景。
在 Workbench 中,通过 Window → Preferences → Wind River → Target Connection 或新建 Target Connection 来配置。以网络连接为例,需要填写目标机 IP、宿主机用于通信的网卡 IP、以及 agent 端口。配置完成后点击 Test Connection,若返回目标机信息(如 VxWorks 版本、CPU 类型),说明链路已通。
如果连接失败,按顺序排查:先用 ping 确认网络可达;再确认目标机是否已加载并启动了 WDB agent(可在目标机串口终端执行 i 或查看启动打印);最后检查防火墙是否拦截了 UDP 端口。
三、交叉调试器设置
Workbench 的调试器是 GDB 的定制版本,配合目标机 agent 完成断点、单步、变量查看等操作。调试器设置主要涉及三部分:
- 调试器类型与工具链:在工程属性中选择与目标架构匹配的编译器前缀,例如 ARM 平台常用
arm-wrs-vxworks-gcc。工具链选错会导致生成的可执行文件无法在目标机运行。 - 符号与源码路径:调试器需要
.out文件中的调试符号(编译时加-g),并保证源码路径与编译时一致,否则断点会显示为“无源码”。 - 连接与下载方式:选择通过 WDB agent 连接,还是通过硬件调试器。应用调试一般选前者,并指定下载到目标机的路径(如
/ram0/app.out或/tffs0/app.out)。
一个常见的调试器配置参数是断点类型:软件断点通过改写指令实现,适合 RAM 中的代码;硬件断点依赖 CPU 断点寄存器,数量有限但可用于 Flash 中的代码。调试初期建议先用软件断点验证流程,遇到只读存储再切换硬件断点。
四、创建第一个可调试工程
在 Workbench 中选择 File → New → Wind River Workbench Project,根据目标类型选择 VxWorks Image Project(VIP,系统镜像工程)或 VxWorks Application Project(应用工程)。对于第一次调试,建议先建一个简单的应用工程,减少变量。
创建时选择目标机类型、工具链和 VxWorks 版本,工程会自动生成源码目录和 Makefile。在 main.c 中写一个最小示例:
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 5; i++) {
printf("debug demo, i = %d\n", i);
}
return 0;
}
编译前确认工程属性中已开启调试信息(-g),然后 Build Project。编译成功后,右键工程选择 Debug As → VxWorks Application,Workbench 会自动连接目标机、下载可执行文件并停在 main 入口。此时在 printf 行设置断点,按继续(Resume),观察变量 i 的变化和串口/控制台输出,即可确认整条调试链路工作正常。
五、验证与常见问题
判断环境是否搭建成功,可以看三个信号:Target Connection 测试返回目标机信息;工程能无错误编译出 .out;调试会话能在 main 处停下并命中断点。若断点不生效,优先检查编译是否带 -g、源码路径是否一致、以及断点是否落在被优化掉的代码上(可临时用 -O0 编译)。若下载失败,检查目标机文件系统路径是否存在、剩余空间是否足够。