remote debug golang dlv wait for a client to connect before continuing the code (visual studio code client)

636 Views Asked by At

I like to be able do very simple thing wait for the client to connect to dlv debugger before continue the code without success . i have simple go server :

package main

import (
    "fmt"
    "net/http"
)

func hello(w http.ResponseWriter, req *http.Request) {

    fmt.Fprintf(w, "hello\n")
}

func headers(w http.ResponseWriter, req *http.Request) {

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}

func main() {
    fmt.Println("server started now!")
    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

    http.ListenAndServe(":8090", nil)
}

i start the server on the linux mechine like this:

vagrant@vagrant:~/go_dev/very_simple_server_dir$ dlv debug /home/vagrant/go_dev/very_simple_server_dir/very_simple_server.go --headless --listen=:3000  --log
API server listening at: [::]:3000
2022-10-31T06:18:47Z warning layer=rpc Listening for remote connections (connections are not authenticated nor encrypted)
2022-10-31T06:18:47Z info layer=debugger launching process with args: [/home/vagrant/go_dev/very_simple_server_dir/__debug_bin]
2022-10-31T06:18:47Z warning layer=debugger can't find build-id note on binary

in visual studio code the launch.json looks like this :

"version": "0.2.0",
    "configurations": [
        {
            "name": "Connect to server",
            "type": "go",
            "request": "attach",
            "mode": "remote",
            "remotePath": "/home/vagrant/go_dev/very_simple_server_dir/",
            "cwd" : "${workspaceFolder}",
            "port": 3000,
            "host": "127.0.0.1",
            "trace": "verbose",
            "asRoot": true,
        }
    ]

it connectes just fine to the remote server the problem is that i like the dlv debug server wait to the client to connect before it execute the go code . i want to be able to set break point in func main() second line

how can i do that ?

1

There are 1 best solutions below

0
vtm11 On BEST ANSWER

The second line in your main.go does no more than register your handler function (hello in this case). This happens before your app is started with ListenAndServe().

I assume you want to debug your app after it is started. You may want to set a breakpoint at the first (and the only) line of your hello function.