首页 > 其他分享 >go 语言调试工具:dlv 简单使用

go 语言调试工具:dlv 简单使用

时间:2024-06-14 20:21:28浏览次数:15  
标签:协程 查看 调试 dlv go 断点 输入

 1.     Delve 介绍

       Delve(通常简写为dlv)是一个为Go语言设计的调试器,它提供了深入代码内部的洞察力和控制力,帮助开发者更好地理解代码的行为,高效地定位和修复问题。

       使用 dlv 进行调试,需要关闭编译器的内联、优化,不可用于生成环境:

              Go 1.10及以后,编译时需指定-gcflags="all=-N -l"

              Go 1.10之前,编译时需指定-gcflags="-N -l"

              参考:https://github.com/go-delve/delve/issues/3338

 

       dlv官方版本仅支持64位程序调试,非官方版本可支持32位 但仅限于Go 1.15以下的版本程序调试

              参考:https://github.com/puppywang/delve/blob/master/CHANGELOG.md

 2.     dlv 基础使用流程

       步骤1:go程序构建,构建参数:

              set GOARCH=arm64

              go build -gcflags="all=-N -l" -o mygo ./cmd/mybox/main.go 

       步骤2:拷贝dlv工具包、64位二进制Go程序包到Linux系统,并赋予可执行权限 

       步骤3:后台运行64位二进制go程序 :nohup ./mygo > /root/app/log/mygo.log 2>&1 & 

       步骤4:top 查看mygo进程 [pid] 

       步骤5: top -d 1 -p [pid] -H 查找cup高的可疑线程 [tid] 

  步骤6:对于已编译好的二进制文件,使用 dlv attach 附加到线程/进程开启调试:  ./dlv attach [tid/pid] 

  步骤7: dlv中输入: grs  打印所有协程信息。 分析协程信息,获取异常协程号:[goroutine id] 

       步骤8: dlv中输入: gr [goroutine id]  在dlv中切换到对应协程 

  步骤9: dlv中输入: bt 分析堆栈信息查找对应代码,分析问题

 

 3.     调试指令说明

  threads:

    ./dlv attach [pid]后输入: threads 可查看该进程所有线程信息

    输入 thread [tid] 可切换至该线程,然后可输入grs查看该线程所有协程信息 

  break 简写 设置断点

    输入:b [xxx.go]: [行数] 可在对应go文件对应行数设置断点 

  breakpoints 简写 bp 查看所有断点

  clear [断点Id] 删除指定断点  clearall 删除所有断点

  continue 简写 c 运行到下个断点

  next 简写 n 单步执行

  args 查看传入函数的参数

  locals 查看局部变量

  print 查看变量值/值类型

  stack 简写bt 查看栈帧信息

  q 退出 dlv

 

 4.     使用技巧:

  4.1     如何通过分析协程信息,获取异常协程

    理解协程状态

    chan receive:协程正在等待从一个channel接收数据。

    select:协程正在等待多个channel操作中的某一个完成。

    GC ... wait:协程与垃圾收集相关,通常不会消耗大量CPU时间。

    debug call:协程与调试器相关,通常不表示性能问题。

   如果协程长时间停留在chan receive或select状态,并且没有看到相应的数据发送到该channel,那么该协程可能被卡住了, 检查与该channel相关的代码逻辑。

  4.2     如何设置断点,查看方法入参、局部变量

   获取到异常协程号后 输入 gr [协程号],进入该协程调试

  输入bt 查看该协程堆栈信息

  输入b xx.go:[行号] 在该行代码设置断点

  输入c 运行到该断点

  输入 args 查看函数入参

  输入 locals 查看函数局部变量

  输入 print [局部变量] 查看变量值

 

 

 5.     参考文档:

  1、 go-delve/delve: Delve is a debugger for the Go programming language. (github.com)

  2、 别再用GDB了,一文掌握Go最好用的调试器Delve-腾讯云开发者社区-腾讯云 (tencent.com)

  3、 使用 Delve 工具调试 Golang 程序-腾讯云开发者社区-腾讯云 (tencent.com)

  4、 go 调试器 delve(dlv) 的使用(附实例及常用命令解释)_dlv attach-CSDN博客

 6.     附件

  dlv 

  dlv使用文档

 

 

https://files.cnblogs.com/files/axibug/dlv.7z?t=1718366928&download=true

标签:协程,查看,调试,dlv,go,断点,输入
From: https://www.cnblogs.com/axibug/p/18248570

相关文章

  • 最新下载:Paragon NTFS for Mac 15【软件附加安装教程】
    ParagonNTFSforMac是Mac平台上一款非常优秀的读写工具,可以在MacOSX中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写NTFS分区,因为在MacOSX系统上,默认状态下我们只能读取NTFS分区,却无法进行写入。而且我们的移动硬盘或U......
  • go基础(1)
    参考网址:教程:Go入门-Go编程语言​前景·Go语言中文文档(topgoer.com)​GoPackages-GoPackages下载并配置环境在官网下载iso后缀的go安装包后,配置go环境与go工作空间环境;go工作空间名自定义为了goProject,在该文件夹下创建三个文件夹src:存放源码bin:存放......
  • SpringBoot集成devtools实现热部署调试
    SpringBoot集成devtools实现热部署调试简述参考多篇网上文章终于实现热部署,中间出现过更改的文件已加载,但是并未自动重启的情况。由于判断不出哪些操作时多余的,记录了所有修改项操作步骤1.pom文件中增加依赖<dependency><groupId>org.springframework.b......
  • 65道Go基础高频题整理(附答案背诵)
    说明一下Golang中make和new的区别?好的,关于make和new在Go语言中的区别,我来解释一下。new函数的作用:new(T)函数会为T类型的新项分配零值内存,并返回其地址,即一个*T类型的值(指针)。这种方法适用于各种类型,包括基本类型如int、float、bool等,以及数组、结构......
  • Go黑帽子|文件搜索和数据库矿工
    文件搜索filepath.Walk遍历目录,regexp.MustCompile来匹配关键字packagemainimport( "fmt" "log" "os" "path/filepath" "regexp")varregexexs=[]*regexp.Regexp{ regexp.MustCompile(`(?i)user`), regexp.MustCompil......
  • 实用软件下载:硕思LOGO设计师最新安装包及详细安装教程
    ​硕思Logo设计师是一款操作灵活简单,且功能强大的logo制作软件,它可以通过简单的点击就可以为网站、博客、论坛和邮件创建专业的logo、条幅、按钮、标题、图标和签名等。 该软件提供了很多精心设计的模板和丰富的资源,为更好的创建logo艺术作品,用户可以导入图片并将SWF电影反编......
  • Go黑帽子|TCP扫描器和代理
    TCP扫描器在worker函数中通过net.Dial测试端口连通,并把worker放到goroutine中运行,port作为管道在主程序和携程中传递扫描信息packagemainimport( "fmt" "net" "sort")funcworker(portschanint,resultschanint){ forp:=rangeports{ address:=fmt.Spr......
  • MongoDB分片(windows电脑系统)
    系统版本:windows10专业版MongoDB:4.4.24分片架构从图中可以看出,分片集群中主要由三个部分组成,即分片服务器(Shard)、路由服务器(Mongos)以及配置服务器(ConfigServer)组成。其中,分片服务器有三个,即Shard1、Shard2、Shard3;路由服务器有两个,即Mongos1和Mongos2;配......
  • MongoDB基本操作(Windows)
    本篇博文介绍知识目标熟悉数据库和集合操作本篇目标掌握MongoDB的部署掌握文档的插入、更新、删除以及查询操作一、MongoDB的安装部署在浏览器输入网址:www.mongodb.com  2. 点击“TRYFREE”或“GETSTARTED”按钮,进入MongoDB的下载页面;3. 在下载页面中,选择适......
  • MongoDB副本集部署(windows)
    环境准备本教程演示mongodb4.4副本集部署(一主两从,伪分布式)节点配置主节点localhost:27017主节点1localhost:27018从节点2localhost:27019 每一个节点(实例)都创建对应的数据文件(data)和日志文件(log)。例如:动实例(服务)语法:bin>mongod-port端口号-dbpath数据路径-logpat......