【发布时间】:2020-01-19 03:36:50
【问题描述】:
我正在尝试编写脚本以在后台启动 OpenOCD,然后启动 GDB 实例并将其连接到我的 OpenOCD 服务器。这主要是有效的,除了一旦我输入中断字符来停止目标,我正在调试我的 OpenOCD 服务器退出。 OpenOCD 似乎正在接收 SIGINT。
我尝试通过多种不同的方式将 OpenOCD 与 GDB 分开,此时我的脚本如下所示:
#! /bin/sh
trap '' SIGINT && nohup sh -c "trap '' SIGINT & openocd -f openocd-jlink.cfg < /dev/null" &
OPENOCD_PID=$!
arm-none-eabi-gdb -ex "set architecture armv6-m" -ex "target extended-remote localhost:2331" obj/main.elf
kill $OPENOCD_PID
我很确定这应该是非常过分的,但只要我在 GDB 中键入中断字符,OpenOCD 仍然会退出。如果我直接从我的 shell 运行相同的命令(而不是作为脚本的一部分),一切都会按预期工作。即使我只运行 openocd -f openocd-jlink.cfg & 后跟 GDB,它也可以工作,不需要单独的 shell、nohup 或捕获 SIGINT。
我希望有人知道我可以在我的脚本中做什么来防止 GDB 中的 SIGINT 到达 OpenOCD。也许有一些方法可以完全从 shell 守护进程?我在这里阅读了很多关于脚本中 SIGINT 的更一般问题的答案,所以我觉得这可能是 OpenOCD 和 GDB 特有的问题。
【问题讨论】:
标签: shell gdb sh sigint openocd