Сбит с толку отладчиком vscode delve

Я искал везде и пробовал все, что мог, но отладка go exes в VSCODE для меня просто очень странная.

Если я шагаю по коду, отладчик иногда прыгает туда-сюда, как будто я переключаю потоки. В большинстве случаев, если я навожу курсор на переменные, ничего не происходит. Если я попытаюсь добавить их в качестве часов, я просто получу «недоступно». Я строю и запускаю из среды IDE.

У меня последняя версия go and delve. Я вижу, что мне следует избегать оптимизации компилятора с некоторыми настройками gcflags, но ничего не происходит. Без понятия, как добиться прогресса. Любые подсказки?


ОБНОВЛЕНИЕ: В конце концов, это была просто опечатка в задаче сборки, используемой VSCODE. Проблема действительно заключалась в оптимизации компилятора, которую нужно было отключить, используя следующий точный синтаксис:

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
    {
        "label": "Make Prog",
        "type": "shell",
        "command": "go",
        "args": [
            "install",
            "-gcflags",
            "-N -l",
            "./..."
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        },


    }
]

}

Также важно то, что я использую «exec», а не «debug» для отладки исполняемого файла.


person Sentinel    schedule 28.06.2018    source источник


Ответы (1)


Delve позволяет вам взаимодействовать с вашей программой, контролируя выполнение процесса, оценивая переменные и предоставляя информацию о состоянии потока/горутины, состоянии регистра ЦП и многом другом.

Delve скомпилирует «основной» пакет в текущем каталоге и начнет его отладку.

На ваш вопрос: -

Если я пошагово выполняю код, отладчик иногда прыгает туда-сюда, как будто я переключаю потоки.

Предположим, у вас есть код, в котором возникает ошибка, и ваш код вызывает панику, тогда VSCode заставит вас перейти к определению паники, определенному в его основных файлах, при отладке кода.

По вашему второму вопросу: -

В большинстве случаев, если я навожу курсор на переменные, ничего не происходит. Если я попытаюсь добавить их в качестве часов, я просто получу «недоступно».

Vs Code может предоставить вам определения только тех функций, которые определены в одном пакете. Поэтому, если они определены в другом пакете, вам необходимо импортировать этот пакет, иначе он покажет вам определение функции unavailable. Поэтому проверьте правильность импорта, где unavailable отображается при наведении.

Дополнительные сведения см. в документации по использованию Delve Debugger.

Отредактировано: даже если происходит переход при использовании F10, создайте точки останова после кода, в котором происходит переход, и используйте F12 для перехода к следующей точке останова, таким образом, она не будет переходить к определению основной функции.

person Himanshu    schedule 28.06.2018
comment
Все это локальные переменные функции. - person Sentinel; 28.06.2018
comment
Никакой паники, он просто шагает по методу, случайным образом перемещаясь вверх и вниз по строкам метода. - person Sentinel; 28.06.2018
comment
@Sentinel Для недоступности переменных это происходит только в том случае, если определение переменной не найдено. Поэтому, пожалуйста, просмотрите свои файлы, чтобы проверить импорт и определение переменных с помощью поиска. - person Himanshu; 29.06.2018
comment
Проверяю все это. Дайте мне день или два. - person Sentinel; 30.06.2018
comment
Хорошо, оказалось, что у меня проблема с файлом tasks.json. Все равно, спасибо за помощь. - person Sentinel; 02.07.2018
comment
@Sentinel Иногда это случается. - person Himanshu; 02.07.2018