如何从Visual Studio Code运行OpenOCD GDB服务器

Dou*_*oub 8 gdb openocd visual-studio-code

我正在开发Cortex-M3微控制器(STM32系列)上的应用程序.我正在尝试使用Visual Studio Code作为调试器接口,使用ST-Link v2 JTAG探针.我设法配置OpenOCD与我的设备通信,VSCode运行本地GDB并连接到OpenOCD.

现在我想在开始调试时让VSCode与GDB同时启动OpenOCD.我有以下launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Pipe Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/path/to/program.elf",
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}/gcc-arm-none-eabi",
            "environment": [],
            "externalConsole": true,
            "pipeTransport": {
                "pipeProgram": "X:\\path\\to\\openocd-0.10.0\\bin-x64\\openocd.exe",
                "pipeArgs": ["-f", "vscode.ocd"],
                "pipeCwd": "${workspaceFolder}"
            },
            "MIMode": "gdb"
        },
        { 
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "request": "launch",
            "cwd": "${workspaceFolder}/gcc-arm-none-eabi",
            "program": "${workspaceFolder}/path/to/program.elf",
            "MIMode": "gdb",
            "targetArchitecture": "arm",
            "miDebuggerPath": "X:\\path\\to\\gcc-arm-none-eabi-4_8-2014q2-20140609-win32\\bin\\arm-none-eabi-gdb.exe",
            "miDebuggerServerAddress": "127.0.0.1:3333"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我的vscode.ocd文件如下:

source [find interface/stlink-v2.cfg]
transport select "hla_swd"
source stm32l1.cfg

stm32l1.cpu configure -event gdb-attach halt
stm32l1.cpu configure -event gdb-detach resume

gdb_port pipe
log_output openocd.log
Run Code Online (Sandbox Code Playgroud)

当我手动启动OpenOCD(没有"gdb_port管道")然后运行配置"(gdb)Attach"时,一切都很好.

但是,当我运行"(gdb)管道启动"配置时,VSCode启动openocd.exe,然后没有任何反应.当我杀死openocd.exe进程时,我在VSCode中弹出一个"无法启动调试.无法建立与GDB的连接.以下消息写入stderr:"后跟一些OpenOCD stderr.

我也可以在命令行中使用以下.gdbinit自行运行GDB:

target remote | openocd -f path/tovscode.ocd
sym path/to/program.elf
Run Code Online (Sandbox Code Playgroud)

所以我的问题是有没有办法让VSCode直接与OpenOCD的GDB服务器通话?否则,如果我需要使用一些本地arm-none-eabi-gdb.exe文件,我如何配置VSCode让它告诉GDB使用远程管道("target remote | something")?