使用Delve调试Go程序报package main不在GOROOT的解决方法
问题根因
执行dlv debug main时,因为命令参数没有标识相对路径,Delve 配合Go 1.15.5的旧版路径检索逻辑,会把传入的main当成内置标准库的包名,直接去GOROOT的src目录下查找对应包,自然找不到文件就触发了报错。
修复操作
- 首先确认命令的执行位置:必须在项目根目录(也就是存放
go.mod文件的最外层目录)下执行,不要提前切进cmd子目录再跑调试命令。 - 修正
dlv命令的传参,给目标路径加上相对路径前缀./,让工具链明确知道要找的是当前项目内的文件,而不是GOROOT下的内置包:- 如果你的调试目标是
cmd/main.go这个独立Go文件,直接执行:dlv debug ./cmd/main.go - 如果
cmd/main是存放独立main函数的子目录,对应执行:dlv debug ./cmd/main/
- 如果你的调试目标是
- 前置校验模块上下文:执行
go env GOMOD,确认输出的路径是你当前项目根目录下的go.mod文件,避免因为模块识别失效,导致工具链走老的GOPATH检索逻辑。 - 兜底排查:如果上述命令仍有异常,先执行
go build ./cmd/...确认项目可以正常编译,只要Go原生工具链能正常编译对应路径的包,Delve就可以正常完成调试流程。
内容的提问来源于stack exchange,提问作者nz_21
相关产品推荐
相关产品推荐

