2017-09-05 21 views
0

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

我使用EAP 172.3968.42(SEP 4日)与围棋1.9版本

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

当我运行没有调试和标志没有被添加需要3秒的编译。 我不需要调试任何导入,只有我的代码是纯粹的Go。

谢谢。

回答

1

Gogland会为了调试它建立与“走出去建立-a ....包/名称......”调试二进制文件。如果你想要旧的行为,那么你需要进入设置|构建,执行,部署|调试器|检查并切换重建传递依赖项。但是,这是不鼓励的,对于任何调试问题,您都需要先将其重新打开,然后报告问题。这是因为在运行“dlv debug package/name”时,Gogland会绕过Delve另外做的事情。有计划希望在Go 1.10中有更好的支持,但这也取决于Go团队的工作。

现在的更长的版本:

你是正确的,使用EAP 12+由于改进的调试支持时,编译速度已经下降了一点。

发生了什么事是,围棋1.9现在可以在所有的优化编译传递依赖做得更好关闭,这意味着藏坑能更好地工作,您的应用程序。

这意味着一切都在GOPATH/PKG和GOROOT/PKG被重新编译调试,以确保没有包已经用在优化不慎包括在内。

如果这会发生,那么你可能最终与不调试以及一个包,有时甚至可能是你的包之一。

不幸的是,就目前而言,优化小康建设不能缓存,由于如何“-a”的作品。这意味着“去构建-i -a -gcflags'-N -l'... package/name ...”目前是不可能的。

当运行“dlv debug ... package/name ....”时,Delve本身会应用“-a”标志,虽然您可以在Gogland中关闭“-a”标志,但我会建议它(或者你必须重新使用它的调试会话,以防万一遇到任何错误,因为这不是Delve正式支持的模式)。

的链接,原来的问题,请参见:https://youtrack.jetbrains.com/issue/GO-4249

希望这有助于。

+0

谢谢Florine :)。我禁用了它,构建时间恢复正常。 – Buzzy

+0

对于我需要仅调试我的Go代码的特殊情况,它会如何影响我?没有对外部输入进行更改,也不需要调试它们。 – Buzzy

+0

问题是,Go工具目前不了解在使用-a时不会重新编译CGO依赖关系,并且它会尝试重新编译所有内容。虽然你可以在没有-a标志的情况下使用调试器,但如果你确实遇到了调试器的问题,那么你需要重新打开它。考虑一下从pkgA跳转到pkgB的情况,pkgB包含已启用优化的代码。在这种情况下,Delve将更难调试代码,这可能导致错误(因此需要-a)。我知道这不太理想,但希望在Go 1.10中有所改进。 – dlsniper

相关问题