go dlv 远程调试

远程机器安装dlv

配置go代理

1
2
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

安装dlv

1
2
go get github.com/go-delve/delve/cmd/dlv
dlv version

命令介绍

Delve时Go程序的源代码级的调试器。

Delve通过控制进程的执行、评估变量以及提供线程/ goroutine状态、CPU寄存器状态等信息,使你能够与程序进行交互。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
使用“--”将标志传递给正在调试的程序,例如:

`dlv exec ./hello -- server --config conf/config.toml`

Usage:
dlv [command]

Available Commands:
attach 连接到正在运行的进程并开始调试.
connect 连接到无头调试服务器.
core 检查核心转储.
debug 编译并开始调试当前目录下的主包或指定的包.
exec 执行预编译的二进制文件,并开始调试会话.
help 帮助信息
run 弃用的命令。使用“debug”替代它.
test 编译测试二进制文件并开始调试程序.
trace 编译并开始跟踪程序.
version 打印版本.

Flags:
--accept-multiclient 允许无头服务器接受多个客户机连接。注意,服务器API不是可重入的,客户端必须协调.
--api-version int 无头时选择API版本. (default 1)
--backend string 后端选择:
default 在macOS上使用lldb,其他地方都是本地的.
native 本地后端.
lldb 使用lldb-server或debugserver.
rr 使用mozilla rr (https://github.com/mozilla/rr).
(default "default") 默认使用的是default
--build-flags string 生成标志,以传递给编译器.
--headless 仅在headless模式下运行调试服务器.
--init string 初始化文件,由终端客户端执行.
-l, --listen string 调试服务器监听地址. (default "localhost:0")
--log 启用调试服务器日志记录.
--log-output string 应该产生调试输出的组件的逗号分隔列表,可能的值为:
debugger 记录调试器命令
gdbwire 日志连接到gdbserial后端
lldbout 将输出从debugserver/lldb复制到标准输出
debuglineerr 读取.debug_line时日志可恢复错误
rpc 记录所有RPC消息
fncall 日志函数调用协议
minidump 日志minidump加载
使用--log启用日志时,默认为“debugger”.
--wd string 用于运行程序的工作目录. (default ".")

使用"dlv [command] --help"获取有关命令的详细信息.

远程机器启动调试进程

到源代码所在的目录

1
dlv debug --headless --listen ":2345" --log --api-version 2

--headless指定只使用调试服务模式,
--listen指定了调试服务的端口,要与vscode的配置一致。
--log启用了调试日志输出,可关闭。
--api-version 2选择调试api的版本,这里必须指定为2,否则不能调试
-- 双减号加空格后填写程序启动的参数

本地vscode 远程调试设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
// 本地调试
{
"name": "check",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}"
},
// 远程调试
{
// 调试配置的名称,用作vscode中区分
"name": "remotedebug",
// 调试类型,go语言当然选择go
"type": "go",
// 调试请求类型,可以选择launch启动调试和attach附加调试
"request": "launch",
// 调试模式,这里选择远程调试
"mode": "remote",
// 必填项,远程调试里好像没什么用处
"program": "${fileDirname}",
// 远程连接的端口号
"port": 2345,
// 远程主机的ip地址
"host": "172.16.100.92",
// 被调试的代码在远程主机上的路径,必须使用绝对路径.且具体到指定调试目录
"remotePath": "/home/go/src/check_people_gin",
}
]
}

开始调试

直接vscode 启动 remotedebug


go dlv 远程调试
https://zhaops-hub.github.io/2021/12/22/go/go dlv 远程调试/
作者
赵培胜
发布于
2021年12月22日
许可协议