调试时为什么添加“-a”

时间:2017-09-05 08:38:45

标签: go goland

我有一个带有CGO导入的项目(sqlite3)。当我运行带有调试的Go应用程序配置时,IDE会添加-a标志,从而导致重建所有内容。在我的情况下,它开始运行需要40秒以上。

我正在使用EAP 172.3968.42(9月4日)和Go 1.9 Release

有没有办法告诉它不要添加-a标志?

当我在没有调试的情况下运行并且没有添加标志时,编译需要3秒钟。 我不需要调试任何导入,只需要调试纯Go中的代码。

感谢。

1 个答案:

答案 0 :(得分:1)

Gogland将使用" go build -a .... package / name ...."来构建调试二进制文件。为了调试它。如果您想要旧的行为,那么您需要进入设置|构建,执行,部署|调试器| Delve和toggle重建传递依赖项。但是,这是不鼓励的,对于任何调试问题,您需要首先将其重新打开,然后报告问题。这是因为Gogland将绕过Delve在运行" dlv debug package / name"时所做的事情。有希望在Go 1.10中有更好的支持,但这也取决于Go团队的工作。

现在是更长的版本:

你是对的,因为改进了调试支持,使用EAP 12+时编译速度有所下降。

Go 1.9现在可以更好地编译传递依赖关系,并关闭所有优化,这意味着Delve可以更好地处理您的应用程序。

这意味着重新编译GOPATH / pkg和GOROOT / pkg中的所有内容以进行调试,以确保没有意外包含优化的软件包。

如果发生这种情况,那么你最终可能会得到一个不调试的软件包,有时甚至可能是你的软件包之一。

不幸的是,目前,由于" -a"" -a"作品。这意味着"去构建-i -a -gcflags' -N -l' ...包裹/名称......"目前是不可能的。

Delve本身将应用" -a"运行" dlv debug ... package / name ...."所以,虽然你可以转动" -a"在Gogland标记,我会反对它(或者你必须使用它来重做调试会话,以防你遇到任何错误,因为这不是Delve正式支持的模式)。

有关原始问题的链接,请参阅:https://youtrack.jetbrains.com/issue/GO-4249

希望这有帮助。