跳到主要内容

使用 VSCode 远程调试 Go 程序

· 阅读需 2 分钟

有两种方法,不管是哪种方法,都需要远程服务器上的源码或编译出的程序和本地保持一致。

1、Headless 方式

在服务端执行:

dlv debug ./cmd/app/main.go --headless --listen=:2345 --api-version=2 --accept-multiclient --continue

go build -gcflags "all=-N -l" -o app ./cmd/app
dlv exec ./app --headless --listen=:2345 --api-version=2 --accept-multiclient --continue

.vscode/launch.json 中配置:

{
"name": "Connect to server",
"type": "go",
"debugAdapter": "legacy",
"request": "attach",
"mode": "remote",
"port": 2345,
"host": "192.168.1.233"
}

2、DAP 方式

在服务端执行:

go build -gcflags "all=-N -l" -o app ./cmd/app
dlv dap --listen=:12345

在客户端配置:

{
"name": "Connect and launch",
"type": "go",
"debugAdapter": "legacy",
"request": "launch",
"port": 12345,
"host": "127.0.0.1", // can skip for localhost
"mode": "exec",
"program": "/absolute/path/to/remote/workspace/program/app",
"substitutePath": [
{ "from": "${workspaceFolder}", "to": "/path/to/remote/workspace" }
]
}

或:

{
"name": "Connect and launch",
"type": "go",
"debugAdapter": "legacy",
"request": "launch",
"port": 2345,
"host": "127.0.0.1", // can skip for localhost
"mode": "debug",
"program": "/absolute/path/to/remote/workspace/cmd/app",
"substitutePath": [
{ "from": "${workspaceFolder}", "to": "/path/to/remote/workspace" }
]
}

更多:https://github.com/golang/vscode-go/blob/master/docs/debugging.md