VSCode如何连接WSL中Docker容器内的gdbserver调试C++应用
错误原因梳理
你三次配置失败的核心问题如下:
- 第一次报错
spawn gdb ENOENT是因为WSL Ubuntu环境未安装gdb客户端,VSCode找不到对应的可执行文件。 - 第二次和第三次报错是因为你错误将
gdbpath/miDebuggerPath参数指向了gdbserver:gdbserver是运行在容器内的服务端程序,仅负责接收调试连接,VSCode在WSL侧需要调用的是gdb客户端,参数必须指向gdb路径而非gdbserver。 - 关于Native Debug扩展安装位置:你通过WSL-Remote连接WSL开发,扩展安装在远程WSL端是正确的,不需要安装在Windows本地。
前置准备
先在WSL Ubuntu终端执行以下命令安装gdb客户端:
sudo apt update && sudo apt install -y gdb
同时确认你的C++代码编译时添加了-g参数保留调试符号,且WSL工作区中的二进制文件和容器内运行的是完全相同的版本。
正确配置
以下两种配置二选一即可,推荐优先使用微软官方C/C++扩展的cppdbg配置,稳定性更好。
1. cppdbg(微软C/C++扩展)配置
在.vscode/launch.json中添加如下配置:
{ "name": "(gdb) Attach to WSL Docker", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/app", "miDebuggerServerAddress": "172.17.0.2:9999", "miDebuggerPath": "/usr/bin/gdb", "cwd": "${workspaceFolder}", "MIMode": "gdb", "stopAtEntry": false, "externalConsole": false }
2. Native Debug扩展配置
在.vscode/launch.json中添加如下配置:
{ "name": "Native Debug Attach to Docker", "type": "gdb", "request": "attach", "executable": "${workspaceFolder}/app", "target": "172.17.0.2:9999", "remote": true, "cwd": "${workspaceRoot}", "gdbpath": "/usr/bin/gdb" }
额外注意事项
- 调试前确认WSL侧可以正常访问容器的9999端口,无防火墙或网络规则拦截。
- 不需要每次手动启动容器内的gdbserver,也可以直接安装VSCode Dev Containers扩展,直接连接容器内部进行开发调试,不需要额外配置gdbserver转发。
内容的提问来源于stack exchange,提问作者Bak Itzik
相关产品推荐
相关产品推荐

