STDOUT 与 GDB、OopenOCD 和半主机一起去哪里?
Where does STDOUT go with GDB, OopenOCD and semihosting?
我正在尝试找出 ARM (STM32042) 上的半主机。如果我直接从命令行 运行 openocd
并通过 TCP 从 gdb
连接到它,我可以看到 printf
输出。但是,如果我从 gdb
内部发射 openocd
,输出会到达天空中的某个大 /dev/null。
如果我用
自己启动 openocd
$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg
并像这样从 gdb
连接到它
(gdb) target remote localhost:3333
我在 opeocd
终端看到 printf
输出。但是,如果我按照 this link 的建议从 gdb
中启动 openocd
,
(gdb) target remote | openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg -c "gdb_port pipe"
我看到了所有 openocd
调试消息(例如,xPSR: 0xc1000000 pc: 0x08001648 msp: 0x20001800, semihosting
),但没有看到我的 printf
。
结果比我想要的稍微复杂一些。显然,不可能在管道中启动 GDB 和 OpenOCD;他们需要通过套接字进行双向通信。因为它需要两个单独的命令调用,并且因为 GDB 的配置不仅仅是一行,所以我把它放到了它自己的一个小存储库中:
https://github.com/arikrupnik/semihosting-ut
repo 有将标准输出路由到控制台的代码,但它做的不止这些。我一直在 http://www.dish.tc 的 ARM 目标上广泛使用它进行单元测试,并发现它非常有用。我很乐意回答有关它的问题。
我正在尝试找出 ARM (STM32042) 上的半主机。如果我直接从命令行 运行 openocd
并通过 TCP 从 gdb
连接到它,我可以看到 printf
输出。但是,如果我从 gdb
内部发射 openocd
,输出会到达天空中的某个大 /dev/null。
如果我用
自己启动openocd
$ openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg
并像这样从 gdb
连接到它
(gdb) target remote localhost:3333
我在 opeocd
终端看到 printf
输出。但是,如果我按照 this link 的建议从 gdb
中启动 openocd
,
(gdb) target remote | openocd -f interface/stlink-v2-1.cfg -f target/stm32f0x.cfg -c "gdb_port pipe"
我看到了所有 openocd
调试消息(例如,xPSR: 0xc1000000 pc: 0x08001648 msp: 0x20001800, semihosting
),但没有看到我的 printf
。
结果比我想要的稍微复杂一些。显然,不可能在管道中启动 GDB 和 OpenOCD;他们需要通过套接字进行双向通信。因为它需要两个单独的命令调用,并且因为 GDB 的配置不仅仅是一行,所以我把它放到了它自己的一个小存储库中:
https://github.com/arikrupnik/semihosting-ut
repo 有将标准输出路由到控制台的代码,但它做的不止这些。我一直在 http://www.dish.tc 的 ARM 目标上广泛使用它进行单元测试,并发现它非常有用。我很乐意回答有关它的问题。