VSCode, WSL и Docker — Отладка с помощью gdbserver

#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?

Вот то, что я уже пробовал, и результат:

  1.  {  "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  
  1.  {  "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  
  1.  {  "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