为什么在远程管道模式下使用OpenOCD时GDB挂起?

为什么在远程管道模式下使用OpenOCD时GDB挂起?,gdb,openocd,Gdb,Openocd,我正在使用GDB和OpenOCD在Windows上的STM32F4DISCOVERY板上调试一个简单的程序。单独启动OpenOCD,并使用TCP/IP连接到OpenOCD时,这种方式很好,如下所示: target remote localhost:3333 完成后,我可以正常使用quit关闭GDB。然而,我希望在“远程管道”模式下使用GDB,而不需要手动启动和停止OpenOCD。对我来说,这似乎是一个比较理想的配置。然而,当我这样做时,我无法退出GDB,因为当我试图退出时它会挂起 OpenOC

我正在使用GDB和OpenOCD在Windows上的STM32F4DISCOVERY板上调试一个简单的程序。单独启动OpenOCD,并使用TCP/IP连接到OpenOCD时,这种方式很好,如下所示:

target remote localhost:3333
完成后,我可以正常使用
quit
关闭GDB。然而,我希望在“远程管道”模式下使用GDB,而不需要手动启动和停止OpenOCD。对我来说,这似乎是一个比较理想的配置。然而,当我这样做时,我无法退出GDB,因为当我试图退出时它会挂起

OpenOCD日志文件显示GDB连接已断开:

Info : dropped 'gdb' connection
但GDB从未退出:

(gdb) quit
A debugging session is active.

        Inferior 1 [Remote target] will be detached.

Quit anyway? (y or n) y
Detaching from program: yagarto_sample.elf, Remote target
Ending remote debugging.

disconnect
命令同样挂起,不再重试。甚至Ctrl-C都不会唤醒GDB。

结果是OpenOCD中存在一个与GDB所做更改相关的错误。有一点细节,已经提交了一份,并提供了一个解决方案:

将此添加到您的cfg:

$_TARGETNAME configure -event gdb-detach { shutdown }
我测试了这个解决方法,它确实有效,但最后,管道模式在Windows上太慢了,我选择使用TCP,尽管它不太方便