#visual-studio-code #vscode-debugger #vscode-remote #gdbserver
Вопрос:
Я хочу отладить приложение C с VSCode, работающее в контейнере docker внутри WSL.
Моя текущая настройка:
- VSCode запущен на главной машине Windows. Расширение «Собственная отладка», установленное на удаленном компьютере (должно быть установлено локально?)
- Исходный код находится в дистрибутиве WSL Ubuntu, VSCode подключен к WSL-удаленному.
- Приложение может быть выполнено из контейнера docker с установленным сервером gdbserver. Контейнер имеет фиксированный IP (172.17.0.2).
Я уже запустил gdbserver в контейнере с:
gdbserver 172.17.0.2:9999 /path/to/app
Как я могу подключить VSCode к серверу gdbserver, работающему в контейнере на WSL?
Вот то, что я уже пробовал, и результат:
-
{ "name": "Simple Native Plugin", "type": "gdb", "request": "attach", "executable": "./app", "target": "172.17.0.2:9999", "cwd": "${workspaceRoot}", "remote": true },
Результат:
Could not start debugger process, does the program exist in filesystem? Error: spawn gdb ENOENT
-
{ "name": "(gdb) Attach - WSL - Native Plugin", "type": "gdb", "request": "attach", "target" : "172.17.0.2:9999", "remote" : true, "executable": "${workspaceFolder}/app", "gdbpath": "/usr/bin/gdbserver", "cwd": "${workspaceRoot}", },
Результат:
undefined/bin/bash: line 0: exec: -q: invalid option exec: usage: exec [-cl] [-a name] [command [arguments ...]] [redirection ...] During startup program exited with code 2. Exiting
-
{ "name": "(gdb) Launch - WSL - CPPdbg Plugin", "type": "cppdbg", "request": "launch", "remote" : true, "miDebuggerServerAddress": "172.17.0.2:9999", "miDebuggerPath": "/usr/bin/gdbserver", "program": "${workspaceFolder}/app", "args": [], "stopAtEntry": false, "cwd": "${workspaceRoot}", "externalConsole": true, "linux": { "MIMode": "gdb", }, "windows": { "MIMode": "gdb" } }
Результат:
Starting: "/usr/bin/gdbserver" --interpreter=mi Unknown argument: --interpreter=mi "/usr/bin/gdbserver" exited with code 1 (0x1).
Ответ №1:
Ваша вторая попытка была почти правильной. Попробуйте ввести путь к gdb
, а gdbserver
не в gdbpath
.
Комментарии:
1. Попробовал это сделать. Получилось точно так же, как и с первой попытки:
Could not start debugger process, does the program exist in filesystem? Error: spawn /usr/bin/gdb ENOENT