Debugging a specific golang unit test with VSCode


I am trying to debug one specific unit test in VSCode with breakpoints.

On the command line, this works perfectly to execute:

go test -v ./cmd/bacalhau -run TestCommands

However, when I select the below to run, I get the following:

        "name": "Debug Specific Test",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "program": "${workspaceFolder}/cmd/bacalhau/devstack_test.go",
        "args": [
        "env": {
            "LOG_LEVEL": "debug"
        "showLog": true


Starting: /home/user/go/bin/dlv dap --check-go-version=false --log=true --log-output=debugger --listen= --log-dest=3 from /home/user/code/bacalhau
DAP server listening at:
2022-03-12T19:31:11Z info layer=debugger launching process with args: [/home/user/code/bacalhau/__debug_bin TestCommands]
2022-03-12T19:31:11Z error layer=debugger can't find build-id note on binary
Type 'dlv help' for list of commands.
2022-03-12T19:31:12Z debug layer=debugger continuing
19h31m12.78 DEBUG   runtime/proc.go:6498    Log level from LOG_LEVEL_ENV_VAR: debug
Zap log level: debug
19h31m12.82 DEBUG   bacalhau/main.go:12 Top of execution - 2022-03-12 19:31:12.824219499 +0000 UTC
Error: unknown command "TestCommands" for "bacalhau"
Run 'bacalhau --help' for usage.
unknown command "TestCommands" for "bacalhau"
Process 3552701 has exited with status 1
2022-03-12T19:31:12Z debug layer=debugger detaching
dlv dap (3552580) exited with code: 0

I have also tried setting "program": "${workspaceFolder}/cmd/bacalhau/devstack_test.go", which results in

Starting: /home/user/go/bin/dlv dap --check-go-version=false --log=true --log-output=debugger --listen= --log-dest=3 from /home/user/code/bacalhau/cmd/bacalhau
DAP server listening at:
Build Error: go build -o /home/user/code/bacalhau/cmd/bacalhau/__debug_bin -gcflags all=-N -l ./devstack_test.go
no packages to build (exit status 1)`

I have looked at the following resources:

  1. Debugging Go tests in Visual Studio Code

#1 in the above list looks almost perfect, but I could not get it to work (I don’t want to debug ${file} I want the same unit test to run no matter what file I have open).

How do I set this up correctly?


Modify the "mode" property in your launch.json:

        "mode": "test",  // This should be "auto" or "test"
        "program": "${workspaceFolder}/cmd/bacalhau/devstack_test.go",
        "args": [],

Or, if you only want to execute the test automatically, you can config it as a task, it’s simpler:

    "version": "2.0.0",
    "tasks": [
            "label": "tmp test",
            "type": "shell",
            "command": "go test -v ./cmd/bacalhau -run TestCommands",
            "problemMatcher": [

Answered By – rustyhu

Answer Checked By – Marilyn (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.