问题描述
我想使用 go get
在模块感知模式下调试 dlv
。假设我在 /some/dir/mymod
有一个 go 模块。要在模块感知模式下使用 go get,我必须执行以下操作
$ cd /some/dir/mymod
$ go get
但是如果我想用 dlv
调试 go 命令本身,我将不得不执行以下操作
$ cd /usr/local/go/src/cmd/go
$ dlv debug -- get [some args here]
如您所见,为了使用 dlv
,我需要在我想要调试的模块中,但是为了使用 go get
,我需要在我想要更新的模块中.所以问题是:如何使用 go get
调试特定模块的 dlv
?
解决方法
根据 https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_debug.md,dlv debug
会导致 Delve“编译并开始调试当前目录中的主包,或指定的包”(重点是我的)。
所以你应该能够做到:
cd /some/dir/mymod
dlv debug cmd/go -- get …
也许
cd /some/dir/mymod
dlv debug $(go env GOROOT)/src/cmd/go -- get …