Golang Go语言中 Goland 自动切换对应 dlv 版本调试程序,同时调试不同 Go 版本的项目再也不用担心版本问题

发布于 1周前 作者 songsunli 来自 Go语言

公司项目用的可能不是最新 go 版本,而我自己折腾一般都是最新版本。但是 goland 没有找到根据不同项目自动切换 dlv 版本的方法。网上都是让 goland 编辑自定义属性 的 bin\idea.properties 文件添加 dlv.path=/xxx ,但这貌似是 goland 的全局配置,也就是所有项目在调试时都使用相同的 dlv 程序。

因此我编写如下代码,用来替换 goland 默认使用的 dlv 程序。该代码会自动识别调试的可执行程序编译的 go 版本,并执行对应 go 版本的 dlv 程序。

只需要在如下路径按照 go 大版本命名存放对应版本 dlv 程序即可。

$GOPATH/bin/dlv.go1.23.exe
$GOPATH/bin/dlv.go1.22.exe
$GOPATH/bin/dlv.go1.21.exe

goland 使用的 dlv 文件就用下面代码编译的可执行程序替换即可。

package main

import ( “debug/buildinfo” “fmt” “os” “os/exec” “path/filepath” “strings” )

func main() { var file string for i, v := range os.Args { if v == “exec” { file = os.Args[i+1] break } } info, err := buildinfo.ReadFile(file) if err != nil { panic(err) } vs := strings.Split(info.GoVersion, “.”)

cmd := exec.Command(
	// install dlv: $GOPATH/bin/dlv.go1.23.exe
	filepath.Join(os.Getenv("GOPATH"), "bin",
		fmt.Sprintf("dlv.%s.%s.exe", vs[0], vs[1])),
	os.Args[1:]...,
)
cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr

if err = cmd.Run(); err != nil {
	panic(err)
}

}


Golang Go语言中 Goland 自动切换对应 dlv 版本调试程序,同时调试不同 Go 版本的项目再也不用担心版本问题

更多关于Golang Go语言中 Goland 自动切换对应 dlv 版本调试程序,同时调试不同 Go 版本的项目再也不用担心版本问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

用最新版的 dlv 就行吧,高版本的 dlv 应该是兼容低版本 go 程序调试吧?

更多关于Golang Go语言中 Goland 自动切换对应 dlv 版本调试程序,同时调试不同 Go 版本的项目再也不用担心版本问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


要是能兼容我也不会想这办法了,网上搜到的都是 goland 新版自带 dlv 调试自己的项目有问题额。

go install delve@latest 然后替换掉 goland 目录下的 dlv 就行了

和 golang 的 dl 原理一样。
https://github.com/golang/dl/blob/304e16060ce9dd939a4a94fd0add52bdd003b0dd/internal/version/version.go#L57

我是自己写个 shell 脚本,可以快速下载任意版本,再搭配 autoenv 可以实现不同项目自动切换 go 版本
https://gist.github.com/vimiix/0927fdfbea926e869a2c631db9eeae8b

在Golang开发中,使用GoLand IDE确实可以极大提升开发效率,尤其是在调试方面。关于GoLand自动切换对应版本的dlv(Delve)调试器以适配不同版本的Go项目,以下是一些专业建议:

  1. 配置多个Go版本

    • 在GoLand中,可以通过设置GOROOT来添加和管理多个Go版本。这样,在切换项目时,可以方便地选择对应的Go版本。
  2. 安装和配置dlv

    • 对于每个Go版本,可能需要一个特定版本的dlv。可以通过编译Delve的旧版本来匹配旧版本的Go项目。
    • 编译完成后,在GoLand中配置dlv的路径,指向正确版本的dlv可执行文件。
  3. 自动切换dlv版本

    • GoLand本身并不直接支持自动切换dlv版本,但可以通过设置环境变量或在项目配置中指定dlv路径来实现类似效果。
    • 可以在项目根目录创建配置文件,或在GoLand的运行/调试配置中设置dlv路径。
  4. 使用dlv进行调试

    • 在GoLand中,设置断点后,可以通过点击Debug按钮启动调试模式。GoLand会自动使用配置的dlv版本进行调试。

通过上述方法,GoLand能够实现对不同版本的Go项目和对应版本的dlv调试器的灵活支持,从而解决版本兼容问题,提升开发效率。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!