Как удаленно отлаживать код Go с помощью VSCode - PullRequest
3 голосов
/ 08 января 2020

Я запускаю процесс внутри docker контейнера, который необходимо отладить. Процесс запускается в точке входа docker через dlv debug /go/src/path/to/package --headless --listen=:2345 --log с целью последующей отладки в VSCode.

Контейнер docker запускается через docker run --rm -it -p 2345:2345 my_image:tag. Примечание: порт delve открыт.

В VSCode я определяю launch.json следующим образом:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Attach remote",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "port": 2345,
            "host": "127.0.0.1",
            "apiVersion": 1
        }
    ]
}

При запуске конфигурации отладки VSCode "attach remote" я получаю enter image description here

Это не совсем ясно, но этот интерфейс заставляет меня поверить, что я теперь подключен к удаленному безголовому отладчику и готов к отладке. У меня есть одна определенная точка останова, которая, как я знаю, будет затронута запросом, который я могу отправить удаленному процессу. Я отправляю этот запрос, получаю результат, и эта точка останова никогда не срабатывает, указывая, что я еще не достиг удаленной отладки.

Что-то не так с моей конфигурацией VSCode «присоединить удаленную»? Я могу выполнить отладку из командной строки с помощью dlv connect :2345 и на самом деле просто отладить удаленный процесс, что указывает на работоспособность автономного сервера. Я бы предпочел отладку с исходным кодом, хотя в VSCode.

1 Ответ

1 голос
/ 16 апреля 2020

Попробуйте еще раз с последней бета-версией vscode- go (апрель 2020 г.) (в любое время после апреля 2020 г. будет достаточно последней официальной версии vscode- go)

Microsoft/vscode-go выпуск 2010 включает это подтверждение от Рамья Рао :

Исправление от # 3108 доступна в последней бета-версии этого расширения. Пожалуйста, попробуйте поделиться с нами
В последней версии расширения есть исправление этой проблемы

И:

Я могу подтвердить, что могу теперь нажимайте точки останова, используя AWS SAM для запуска контейнера linux с бинарными файлами delve и go, скомпилированными из Windows.

Для тех, у кого все еще есть эта проблема (как у меня до того, как я редактировал этот комментарий) , позаботьтесь о том, чтобы элемент «remotePath» вашего запуска. json - это абсолютный путь к исходным файлам, скомпилированным в вашей локальной системе (не в контейнере) .
Как указано выше - это абсолютный локальный путь, который добавляется в таблицу файлов модуля компиляции DWARF при компиляции двоичного файла .

...