首先,我们需要在本地和远程服务器上安装Delve。在终端中运行以下命令:
go install github.com/go-delve/delve/cmd/dlv@latest
在本地和远程服务器上,创建一个简单的Go程序作为我们的示例代码。文件名为main.go,定义一个变量i和doSomething方法的参数n足够我们观察变量:
package main
import (
"fmt"
"time"
)
func main() {
var i int
fmt.Println("Start...")
for i = 0; i < 5; i++ {
doSomething(i)
time.Sleep(time.Second)
}
fmt.Println("End...")
}
func doSomething(n int) {
fmt.Println("Doing something with", n)
}
在远程服务器的示例代码目录中,运行以下命令启动Delve:
dlv debug --headless --listen=:2345 --api-version=2
在本地开发机器上,我们需要在Visual Studio Code中配置远程调试。首先打开launch.json
文件,然后添加以下配置:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch file",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${file}"
},
{
"name": "Connect to server",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "/root/src/delve_test",
"port": 2345,
"host": "119.45.241.70",
"apiVersion": 2
}
]
}
请确保替换/root/src/delve_test
和服务器地址
为远程服务器的实际路径和地址。
在Visual Studio Code中,打开刚才编辑的launch.json
文件,选择“Connect to server”,然后按下F5开始调试。
我们可以在本地的Visual Studio Code中设置断点、查看变量、单步执行等,就像在本地调试一样,但实际的代码执行是在远程服务器上。
当我们完成调试后,可以在Visual Studio Code中按下Shift+F5来停止调试。
7. 调试编译后二进制程序
调试二进制程序需要需要注释掉调试代码的remotePath配置属性,否则匹配不上断点,launch.json文件内容如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch file",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${file}"
},
{
"name": "Connect to server",
"type": "go",
"request": "attach",
"mode": "remote",
// "remotePath": "/root/src/delve_test",
"port": 2345,
"host": "119.45.241.70",
"apiVersion": 2
}
]
}
我们需要在远程服务器上使用Delve启动二进制文件。在服务器编译程序或在windows编译linuxP平台的二进制程序参考下面的命令:
$env:GOOS = "linux"; $env:GOARCH = "amd64"; go build -o uml
通过以下命令在服务启动程序:
dlv --listen=:2345 --headless=true --api-version=2 exec ./uml
这将启动我们的程序并使其准备接受远程调试连接。2345
是Delve监听的端口号,可以根据需要更改。
变量n
变量i
服务器命令和显示内容
使用Visual Studio Code和Delve进行Golang的远程调试非常方便快捷。无论是分布式开发,还是在特定环境下测试代码,都可以借助远程调试来实现。