2010-05-24 68 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当前在光标下的所有出现。有了这些信息,您可以决定是否进行更改。

唉,在目前的版本中,这个功能并不像应该那样可靠。