govisual-studio-code

Couldn't start dlv dap


When I launch in VSCode dlv dap debug, I get this message:

Couldn't start dlv dap:
Error:timed out while waiting for DAP server to start

I already have launch configurations for the project:

lunch.json:

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Launch file",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "program": "${workspaceFolder}",
        "showLog": true,
        "env": {
            "GO111MODULE": "on"
        }
    }
]
}

and setting.json is :

{
"folders": [
    {
        "path": "."
    }
],
"settings": {
    "go.useCodeSnippetsOnFunctionSuggestWithoutType": true,
    "go.autocompleteUnimportedPackages": true, 
    "go.gocodePackageLookupMode": "go",
    "go.gotoSymbol.includeImports": true,
    "go.useCodeSnippetsOnFunctionSuggest": true,
    "explorer.confirmDelete": false,
    "go.formatTool": "goimports",
    "go.docsTool": "gogetdoc",
    "go.buildFlags": [],
    "explorer.confirmDragAndDrop": false,
    "window.zoomLevel": 0.8,
    "editor.minimap.enabled": false,
    "go.useLanguageServer": true,
    "go.delveConfig":{
        "debugAdapter":"dlv-dap"
        },
    "[go]": {
        "editor.snippetSuggestions": "none",
        "editor.formatOnType": true,
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
            "source.organizeImports": true
        }
    },
    "gopls": {
        "experimentalWorkspaceModule": true,
        "usePlaceholders": true, // add parameter placeholders when completing a function
        "completionDocumentation": true // for documentation in completion items
    }
},
    
}

The structure of the project is shown in the figure:


Solution

  • You might have some luck switching the delveConfig to use legacy mode:

        "go.delveConfig":{
            "debugAdapter":"legacy"
            }
    

    My team and I recently began seeing the same issue after updating VSCode. There's a little more info on this setting here: https://go.googlesource.com/vscode-go/+/HEAD/docs/debugging.md#switching-to-legacy-debug-adapter, but I believe root cause (if this does indeed solve your issue) is going to be your version of Golang is not the version targeted by dlv-dap. Anything below Go version 1.15 needs to use legacy mode, and the latest version of the delve debugger happens to skip legacy mode by default now.

    I also needed to kill VSCode before this change took effect. According to the dlv-dap docs, you can also force it into legacy mode by switching launch.json's mode to "remote", so there's likely a few (maybe better) ways to resolve this issue.