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有以下三种方式进行断点调试:

  1. dlv attach pid:对正在运行的进程直接进行调试(pid 为进程id);
  2. dlv debug:编译源文件并开始调试,这里应和 main 函数位于同一目录,或者指定完整的 main 函数路径
  3. 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 实现远程调试

  1. 在目标服务器安装dlv
  2. 将本地项目打包成二进制文件并推送到目标服务器
go build -gcflags "all=-N -l" 关闭内联优化,编译生成调试符号
  1. 在目标服务器执行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 是否多用户连接
  1. 在goland上设置远程debug

posted @   元気田支店长  阅读(1188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示