golang dlv程序调试
安装dlv
执行go install 安装dlv
go install github.com/go-delve/delve/cmd/dlv@latest
执行 dlv version 查看是否安装成功
$ dlv version
Delve Debugger
Version: 1.22.0
Build: $Id: 61ecdbbe1b574f0dd7d7bad8b6a5d564cce981e9 $
断点调试
dlv有以下三种方式进行断点调试:
- dlv attach pid:对正在运行的进程直接进行调试(pid 为进程id);
- dlv debug:编译源文件并开始调试,这里应和 main 函数位于同一目录,或者指定完整的 main 函数路径
- dlv exec filename:从二进制文件启动调试
dlv常用调试命令:
命令 | 含义 |
---|---|
b | 设置断点 |
bp | 打印正活动的断点信息 |
clear | 删除断点 |
clearall | 删除所有断点 |
c | 运行直到断点处或程序终止 |
n | 下一步,不会进入函数 |
s | 下一步,会进入函数 |
so | 跳出当前函数 |
args | 查看函数参数 |
locals | 查看所有局部变量 |
list | 打印当前源代码 |
on | 运行到某断点然后执行相应的命令,比如 on 2 list |
bt | 打印当前调用栈 |
exit | 退出 |
goroutines (grs) | 列出所有的 goroutines |
goroutine (gr) | 查看当前的 goroutine |
goland 使用 dlv 进行断点调试
点击debug按钮进入调试
添加断点
注:有的goland编译器不能执行debug如下图,是因为goland自带的dlv版本过低,升级dlv的版本即可
或者去修改dlv的默认路径:
goland debugger使用
dlv + goland 协程调试
参考文章:https://polarisxu.studygolang.com/posts/go/translation/how-to-find-goroutines-during-debugging/
使用自定义数据为 goroutine 加上标签
go func() {
labels := pprof.Labels("task", "协程唯一值")
pprof.Do(context.Background(), labels, func(_ context.Context) {
// 此处为协程执行任务
}
}()
dlv + goland 实现远程调试
- 在目标服务器安装dlv
- 将本地项目打包成二进制文件并推送到目标服务器
go build -gcflags "all=-N -l" 关闭内联优化,编译生成调试符号
- 在目标服务器执行dlv命令
dlv --listen=127.0.0.1:1234 --headless=true --api-version=2 --check-go-version=false --only-same-user=false exec main
--listen 监听端口
--headless 无头模块,接受客户端连接
--api-version 无头模式设置为2
--only-same-user 是否多用户连接
- 在goland上设置远程debug
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!