无工作台的 VxWorks 调试
Posted
技术标签:
【中文标题】无工作台的 VxWorks 调试【英文标题】:VxWorks debugging without workbench 【发布时间】:2016-05-05 13:58:14 【问题描述】:是否可以在没有带有 GDB 的 Workbench 或其他免费调试器的情况下调试 VxWorks 任务? 网上看只报告gdb(目标vxworks ID)的旧命令不再起作用;此外,在引入 VxWorks 5.3 之后,WDB 协议看起来从未被移植到 gdb 中,除了 vetust 版本上的一个暂定版本并且仅适用于 PowerPc 平台(我需要调试 x86 VxWorks 6.9)
【问题讨论】:
【参考方案1】:我不知道它是什么版本,但多年前我为使用 VxWorks 的 FRC 机器人创建了gdb2wdb。自从 FRC 迁移到基于 Linux 的系统后,代码就没有得到维护,但我认为没有理由不通过对常量和 gopher 字符串进行一些调整来减少 FRC 特定性。
GDB2WDB 是一个类似于 gdbserver 进程的 Ruby 脚本,您可以在本地计算机上运行 gdb2wdb 并将其指向您的 vxworks 机器,然后通过 target remote :2345
将 gdb 指向 gdb2wdb。
如果内存正常,它可以在 2.0.1 之后的任何版本的 ruby(或 1.7 之后的 jruby)上运行,如下所示:
ruby -I lib bin/gdb2wdb [your-arguments-here]
查看 --help 参数并注意这个 FRC 特定的术语和布局:
cRIO - 带有 VxWorks 的控制器的名称。基于 PowerPC FRC_UserProgram.out - FRC 机器人代码上传的内核模块 FRC_UserProgram_StartupLibraryInit - FRC 机器人代码的入口点 FRC_RobotTask - FRC 机器人代码的主线程 powerpc-wrs-vxworks - 用于 FRC 机器人代码的 GCC 三元组还要确保链接器设置(在 lib/elf_utils.rb 中)适用,WdbGopherStrings
(来自 lib/wdb/wdb.rb)中的 GOPHER 命令可能需要针对不同版本的 vxWorks 调整偏移量/地址&x86。它们可以是 synthesized from the C headers (p. 160-167) 或来自现有 Workbench 调试器会话的 Wireshark 捕获。
重要提示:gdb2wdb 是相当的 hack,并且许多功能不受支持,但我确实记得当时我实现了足以能够使用库存 Eclipse CDT + gdb,所以对于简单的情况应该足够了。
【讨论】:
【参考方案2】:在 VxWorks 目标 shell 上尝试 -> dbgHelp,它显示交互式 shell 调试命令。
【讨论】:
【参考方案3】:Wind River 当然鼓励使用 Workbench 进行检查式调试(这很有意义,因为它需要 Wind River 许可证),但似乎有一些方法可以使用 GDB 和一些配置来调试 VxWorks 中的任务。 请参阅此old GDB VxWorks manual。现在这本手册是 2002 年的,所以我想有很多东西不是最新的,但希望这对您有所帮助(当然,如果 VxWorks 的现代版本为本文中详述的方法提供旧版支持)。
您很可能知道,VxWorks 支持基本的基于打印的调试样式,可以通过 printf() 或来自logLib 的高级 logMsg() 函数来执行。
【讨论】:
以上是关于无工作台的 VxWorks 调试的主要内容,如果未能解决你的问题,请参考以下文章