Debugging Go tests in Visual Studio Code

25,828

Solution 1

To launch debugger for test I added one more configuration for launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Code",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [],
            "showLog": true
        },
        {
            "name": "Test Current File",
            "type": "go",
            "request": "launch",
            "mode": "test",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${file}",
            "env": {},
            "args": [],
            "showLog": true
        }       
    ]
}

Also this configuration does not support tags. All tags in test files have to be disabled

// +build unit
...

Solution 2

For the mode, you can select auto which would choose either debug or test depending on active editor window.

All options for mode are auto, debug, test, exec, replay, core.

The resulting launch.json would look like:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch file",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${file}"
        }
    ]
}
Share:
25,828

Related videos on Youtube

Vitalii
Author by

Vitalii

merge keep

Updated on April 15, 2022

Comments

  • Vitalii
    Vitalii about 2 years

    On my Windows machine, I have Visual Studio Code installed. To run tests manually, I go in console to projects folder and enter

    go test main_test.go
    

    It works perfectly.

    enter image description here

    But I have a situation in which I need to debug my test to understand what's going on.

    For this I open launch.json and add a configuration

      {
            "name": "Tests",
            "type": "go",
            "request": "launch",
            "mode": "test",
            "remotePath": "",
            "port": 2346,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [
               "main_test.go"
                ],
            "showLog": true
        }
    

    After I press F5 I have

    2017/03/29 13:28:11 server.go:73: Using API v1
    2017/03/29 13:28:11 debugger.go:68: launching process with args: [./debug.test main_test.go main_go]
    not an executable file
    Process exiting with code: 1
    

    Any ideas why this error occurs and what executable it's looking for?

    • Bob
      Bob about 7 years
      Try to specify 'program' property in configuration with executable file '${workspaceRoot}/main_test.go'
    • Vitalii
      Vitalii about 7 years
      That's it, thanks!
  • Calvin Zhou
    Calvin Zhou over 4 years
    Mode test is the key thing here and you saved my life! Thanks a lot as it's so difficult to find proper solution when I tried to debug unit test in vscode, what a combination!
  • learning2learn
    learning2learn about 4 years
    Does anyone know what the change would be to debug a "go test" case remotely?
  • Jerinaw
    Jerinaw over 2 years
    This solution used to work for me, now it doesn't. I'm not sure what changed but I had to change "program": "${file}" to "program": "${relativeFileDirname}" because VSCode was not finding the other files in the package.
  • Brenno Leal
    Brenno Leal over 2 years
    In fact MODE = TEST was the answer I did no found in any other place! Thank you for share it with us.