当前位置: 首页 > article >正文

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. 断点调试
  • 设置断点:你可以在代码中的特定行设置断点,当程序执行到这些行时会暂停,方便你逐步检查程序的状态。例如,在一个复杂的算法函数中,你可以在关键步骤处设置断点,观察变量的值和程序的执行流程。
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 的调试功能能够大大提高开发效率,节省调试时间,因此是非常必要的工具。

http://www.kler.cn/a/578791.html

相关文章:

  • 如何监控 Pod 的 CPU/内存使用率,prometheus+grafana
  • ②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
  • VSCode+AI编程生态实战:从环境配置到智能编码的全栈指南
  • 软考 中级软件设计师 考点知识点笔记总结 day02
  • Vite 打包后Nginx部署配置
  • QOJ9700 Ying’s Cup(拉格朗日插值优化卷积,背包,二项式反演)
  • 驱动开发系列46 - Linux 显卡KMD驱动代码分析(七)- 显存管理
  • VS Code连接服务器教程
  • 泛型、泛型上限、泛型下限、泛型通配符
  • Codeforces Round 566 (Div. 2) E. Product Oriented Recurrence 矩阵加速、欧拉降幂
  • 自然语言模型NLP :tensorflow搭建情感分析模型
  • 企业数据挖掘平台×DeepSeek强强联合,多种应用场景适用
  • 实现静态网络爬虫(入门篇)
  • 数据结构--【栈与队列】笔记
  • 计算机视觉算法实战——犯罪行为检测(主页有源码)
  • C++复试笔记(一)
  • PreTrainedModel 类代码分析:_load_pretrained_model
  • 基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
  • 异常与日志简易版本
  • OpenCV 作为第三方库编译并在 C++ 项目中使用