2017-09-05 62 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

相關問題