golang dlv调试工具

golang dlv调试工具

在goland2022.2版本 中调试go程序报错

WARNING: undefined behavior - version of Delve is too old for Go version 1.20.7 (maximum supported version 1.19)

即使你go install了新的dlv也无济于事

分析得出Goland实际使用的是

Goland安装目录下dlv

例如我的如下
D:\Program Files\JetBrains\Goland2022\GoLand 2022.2.3\plugins\go\lib\dlv\windows\dlv.exe

示例2:
D:\Program Files\JetBrains\GoLand 2022.3.2\plugins\go-plugin\lib\dlv\windows

解决办法

复制代码
go install github.com/go-delve/delve/cmd/dlv@v1.21.1

然后再$GOWORK/bin下找到dlv, 然后替换
D:\Program Files\JetBrains\Goland2022\GoLand 2022.2.3\plugins\go\lib\dlv\windows\dlv.exe

再进行debug调试, 一切正常

Dlv介绍

Delve(简称 dlv)是一款专门为 Go 语言开发的强大调试器,在 Go 项目开发过程中有着非常重要的作用,不过它并非是绝对必需的,下面为你详细介绍:

Delve 的作用

1. 断点调试
  • 设置断点:你可以在代码中的特定行设置断点,当程序执行到这些行时会暂停,方便你逐步检查程序的状态。例如,在一个复杂的算法函数中,你可以在关键步骤处设置断点,观察变量的值和程序的执行流程。
go 复制代码
package main

import "fmt"

func main() {
    sum := 0
    for i := 1; i <= 10; i++ {
        sum += i
        // 可以在此处设置断点,观察 sum 和 i 的值
        fmt.Println(sum)
    }
}
  • 单步执行:支持单步执行代码,包括逐行执行(Step Over)、进入函数内部执行(Step Into)和跳出当前函数(Step Out)等操作,帮助你深入了解代码的执行细节。
2. 查看变量和内存状态
  • 查看变量值:在程序暂停时,你可以查看当前作用域内所有变量的值,了解它们在特定时刻的状态。这对于调试逻辑错误或查找变量赋值异常非常有用。
  • 检查内存布局:能够查看变量的内存布局,了解 Go 程序在内存中的运行情况,帮助你发现内存泄漏、指针错误等问题。
3. 调试 goroutine
  • 查看 goroutine 状态:Go 语言以其强大的并发特性而闻名,Delve 可以让你查看所有正在运行的 goroutine 的状态、堆栈跟踪信息,帮助你调试并发程序中的死锁、竞态条件等问题。
  • 切换 goroutine:可以在不同的 goroutine 之间进行切换,单独调试某个 goroutine 的执行流程。
4. 条件断点
  • 可以设置条件断点,只有当满足特定条件时,程序才会在断点处暂停。例如,你可以设置只有当某个变量的值大于 100 时,程序才会暂停,这样可以更精准地定位问题。

是否一定要有 Delve

Delve 并不是开发 Go 程序的绝对必需品,具体是否需要使用它取决于你的开发需求和场景:

  • 对于初学者:Delve 可以帮助你更好地理解代码的执行流程和变量的变化,尤其是在遇到复杂的逻辑错误时,通过调试器可以快速定位问题,所以非常有帮助。
  • 对于简单项目:如果项目逻辑简单,代码量较少,可能通过打印日志的方式就足以发现和解决问题,此时可以不使用 Delve。
  • 对于复杂项目和专业开发者:在处理大型项目、复杂的并发逻辑或者性能优化时,Delve 的调试功能能够大大提高开发效率,节省调试时间,因此是非常必要的工具。
相关推荐
心在飞扬21 分钟前
RAG 进阶检索学习笔记
后端
Moment22 分钟前
想要长期陪伴你的助理?先从部署一个 OpenClaw 开始 😍😍😍
前端·后端·github
Das1_23 分钟前
【Golang 数据结构】Slice 底层机制
后端·go
得物技术24 分钟前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
古时的风筝25 分钟前
花10 分钟时间,把终端改造成“生产力武器”:Ghostty + Yazi + Lazygit 配置全流程
前端·后端·程序员
Cache技术分享26 分钟前
340. Java Stream API - 理解并行流的额外开销
前端·后端
初次攀爬者29 分钟前
RocketMQ 消息可靠性保障与堆积处理
后端·消息队列·rocketmq
ygxb35 分钟前
如何去创建一个规范化的Agent SKIll?
后端·ai编程·claude
JxWang051 小时前
Task01:环境搭建,初识数据库
后端
周杰伦jc1 小时前
RocketMQ 完全指南:从入门到原理到生产实战、八股面试
后端