delve调试器
简介
Go语言支持GDB、LLDB和Delve调试器,GDB是最早支持的,而Delve是专为Go语言设计开发的调试器。
项目仓库地址:https://github.com/go-delve/delve
安装
Go 1.16之后
go install github.com/go-delve/delve/cmd/dlv@latest
验证,查看版本
dlv version
基础使用
- 创建一个go项目,名为
tmpgo
mkdir tmpgo
cd tmpgo
go mod init tmpgo
- 添加文件
main.go
,写入以下内容
package main
import "fmt"
func main() {
s := "hello world"
fmt.Println(s)
}
- 在
tmpgo
项目的根目录下运行delve
dlv debug tmpgo
- 常用操作
命令 | 缩写 | 说明 | 示例 | 示例说明 |
---|---|---|---|---|
help | h | 查看所有可用命令,使用参数可查看指定命令的帮助 | help list | 查看list命令的帮助 |
list | l | 查看源码, 查看断点处的源码 | list main.main | 查看main.main函数的源代码 |
break | b | 设置断点 | b main.main | 为main.main函数添加断点 |
b demo.go:7 | 在demo.go文件的第7行添加断点 | |||
breakpoints | bp | 查看所有断点 | ||
next | n | 逐行执行 | ||
continue | c | 运行直到遇到断点 | ||
clear | 清除断点 | |||
step | s | 跳进调用的函数 | ||
stepout | so | 跳出调用的函数 | ||
p | 打印变量的值 | p s | 查看变量s的值 |
补充
如果要对二进制程序进行调试,编译的时候需要添加参数-gcflags=all="-N -l"
以禁止编译器的优化与内联,示例
go build -o ginapp -gcflags=all="-N -l" main.go
vscode远程开发调试
- 在远程服务器上运行dlv
# 进入项目根目录
cd tmpgo
# 运行dlv
dlv --listen=:2345 --headless=true --api-version=2 --accept-multiclient --check-go-version=false debug
- 在vscode上编辑调试的
Launch.json
文件。大部分内容是vscode自行生成的,主要加了行"apiVersion": 2
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Connect to server",
"type": "go",
"request": "attach",
"mode": "remote",
"remotePath": "${workspaceFolder}",
"port": 2345,
"host": "127.0.0.1",
"apiVersion": 2
}
]
}
- 在vscode打断点调试即可。