2010-05-24 97 views
6

所有的編譯錯誤,我做我的Delphi工程的一些重構。我希望能夠做出改變,然後看看所有因這種變化是打破該項目的地方。類似於Eclipse列出項目的所有編譯錯誤(使用Java)。在Delphi中,我可以進行更改,然後重新編譯我的項目,但編譯器在找到不編譯的第一個單元時停止。我必須修復該單元,再次編譯,然後將顯示下一個錯誤等。查找一個Delphi項目

我希望能夠看到全部立即在項目中編譯錯誤。然後我可以決定這個變化是否值得做。例如,如果改變將需要50個單獨的源文件的手固定,它不值得做的事情。但是如果它只能打破2個文件,那麼這是一個簡單的改變。

有沒有辦法在Delphi中做到這一點?我可以告訴編譯器在找到一個不能編譯的單元之後繼續前進嗎?

我使用德爾福2010

回答

5

德爾福單元作爲一種模塊化特性,在概念上與Java Jars或.NET程序集類似;他們編譯成單個文件。在引用模塊中有編譯錯誤時,無論是Java還是.NET,都無法編譯相關模塊。

它們比.NET程序集更細粒度的原因歸結於它們的歷史。它們的設計部分圍繞分段x86架構;與任何一個單位相關的數據不能大於64KB。同樣,單位也是近碼和遠碼之間的自然分工。如果你熟悉16位x86,你就會知道,指針遠遠數據所需段的值以及偏移,而附近只有數據所需的偏移量。在代碼附近調用也比調用遠端代碼快。那時程序也變得更小更復雜,該單元對於整個子系統的行爲價值是合理的模塊粒度。今天情況就不那麼簡單了。

+0

有趣。換句話說,如果我將所有課程都放在一個大單元中,而不是將每個課程放在一個單獨的單元中,我可以立即查看單元中的所有錯誤。 正如你所暗示的那樣,這對於我們今天所做的項目規模並不真實(是否曾經?)。我當然從來沒有見過一個Java jar,它有一個.java文件的完整源代碼! – awmross 2010-05-24 05:47:48

+0

@awmross:有趣的,但明顯錯誤。 Eclipse可以顯示所有Java文件中的所有錯誤。 Delphi顯然也​​可以這樣做,至少在「執行」部分中存在錯誤。即使「接口」部分的錯誤也不會妨礙不依賴於錯誤單元的單元的編譯。真正的原因可能是Delphi開發人員沒有看到這個功能足夠有用。 – maaartinus 2013-11-18 20:02:28

+0

@maaartinus - 我不認爲這是一個沒有被視爲有用的問題,更多的是它被視爲使用* less *。例如任何C#deveoper都會告訴你,如果解決方案中的某個程序集中出現編譯失敗,通常會導致由於該程序集不可用而導致級聯錯誤。因此,您需要修復200多個錯誤,但如果您修復了第一個編譯錯誤,則會解決** all ** 200+錯誤。那麼200 + -1錯誤真的提供了什麼有意義的指示?當> 1錯誤有用的場合可能存在,但是很少和很遠。 – Deltics 2017-07-31 19:23:12

5

有沒有辦法做到這一點與Delphi編譯器,但如果你正在考慮作出重大更改到一個單位的公共接口的某些部分,可以使用重構工具附帶的IDE找到你有關你改變它之前改變不管它是所有引用,這會給你你正在尋找的信息。

+1

我很樂意爲此使用重構工具。不幸的是,它們不適用於同一個項目組中的不同項目。他們在同一個項目中重構,但其他項目中使用該單元的任何單位不會被更改。 – awmross 2010-05-24 03:34:00

+0

@awmross:啊。你沒有提到你的問題中的項目*組*。 – 2010-05-24 03:59:07

+1

我正在使用D2009並使用重構。據我所知,他們正在跨項目組的項目進行工作(只要你有團隊開放)。當我在共享單元中重命名類或方法時,所有參考在所有項目中都會更改。無可否認,我大多使用「重命名」重構......不知道其他人。 – 2010-05-24 09:11:52

0

德爾福編譯器已經嘗試編譯儘可能多。
不幸的是,很多時候,一個錯誤對於防止編譯器移過錯誤非常重要,因爲它不能假定如果可編譯的話應該是什麼代碼。

此外,經常遇到第一個錯誤後編譯器可能發生的錯誤是不可靠的,甚至可能會在第一個錯誤修復後消失。 (所有紅色波浪線在你輸入時出現和消失時見證)

但是編譯器做的事情是提供所有的提示和警告(它們被稱爲一些其他編譯器的錯誤)。

+1

考慮到其他語言能夠做到這一點,我不確定這是不可能的。也許有一些關於Delphi(語言)的東西使得編譯器無法做到這一點。 – awmross 2010-05-24 03:39:01

+0

德爾福有一個單通編譯器。這就是爲什麼它如此之快,而且爲什麼一些錯誤只是終端。正如我已經說過的,它可以在某些情況下發現超過1個錯誤。 – 2010-05-24 06:13:37

0

您可以使用Ctrl-Shift-Enter查看變量,屬性,方法或wahtever當前在光標下的所有出現。有了這些信息,您可以決定是否進行更改。

唉,在目前的版本中,這個功能並不像應該那樣可靠。