查找Delphi项目中的所有编译错误

查找Delphi项目中的所有编译错误,delphi,Delphi,我正在对我的Delphi项目进行重构。我希望能够进行更改,然后查看项目中因该更改而中断的所有位置。类似于Eclipse如何列出项目的所有编译错误(在Java中) 在Delphi中,我可以进行更改,然后重新编译我的项目,但是当编译器找到第一个未编译的单元时,它就会停止。我必须修复该单元,再次编译,然后显示下一个错误,等等 我希望能够一次看到项目中的所有编译错误。然后我可以决定是否值得做改变。例如,如果更改需要手动修复50个独立的源文件,则不值得这样做。但是,如果它只破坏2个文件,那么这是一个很容易

我正在对我的Delphi项目进行重构。我希望能够进行更改,然后查看项目中因该更改而中断的所有位置。类似于Eclipse如何列出项目的所有编译错误(在Java中)

在Delphi中,我可以进行更改,然后重新编译我的项目,但是当编译器找到第一个未编译的单元时,它就会停止。我必须修复该单元,再次编译,然后显示下一个错误,等等

我希望能够一次看到项目中的所有编译错误。然后我可以决定是否值得做改变。例如,如果更改需要手动修复50个独立的源文件,则不值得这样做。但是,如果它只破坏2个文件,那么这是一个很容易做出的更改

在Delphi中有什么方法可以做到这一点吗?我能告诉编译器即使在找到一个不编译的单元后也要继续运行吗


我使用的是Delphi 2010

Delphi编译器无法做到这一点,但是如果您考虑对单元的公共接口的某些部分进行突破性的更改,您可以使用IDE附带的重构工具,在更改之前查找所有要更改的内容的引用,这将为您提供所需的信息。

Delphi编译器已经尝试尽可能多地编译。
不幸的是,一个错误往往非常关键,足以阻止编译器越过该错误,因为它无法假设如果代码是可编译的,那么它应该是什么代码

此外,编译器在遇到第一个错误后可能给出的错误通常是不可靠的,甚至可能在修复第一个错误后消失。(由您打字时出现和消失的所有红色曲线见证)


然而,编译器所做的是提供所有提示和警告(对于某些其他编译器称为错误)。

Delphi单元作为一种模块化特性,在概念上与Java JAR或.NET程序集处于类似的级别;它们编译成单个文件。在Java和.NET中,当引用模块中存在编译错误时,您都无法编译依赖模块


它们比.NET程序集等更细粒度的原因在于它们的历史。它们部分是围绕分段的x86体系结构设计的;与任何一个单元关联的数据不能大于64KB。类似地,单元作为近代码和远代码之间的自然划分。如果您熟悉16位x86,您就会知道指向远数据的指针需要一个段值和偏移量,而近数据只需要一个偏移量。调用近代码也比调用远代码快。当时的程序也更小、更不复杂;对于整个子系统的行为,该单元是一个合理的模块粒度。现在的情况就不是这样了。

您可以使用Ctrl-Shift-Enter键查看当前光标下变量、属性、方法或wahtever的所有事件。根据这些信息,您可以决定是否进行更改


遗憾的是,在当前版本中,此功能的可靠性并不如它应该的那样高。

我希望使用重构工具来实现这一点。不幸的是,它们不能跨同一项目组中的不同项目工作。它们在同一个项目中重构,但其他项目中使用该单元的任何单元都不会被更改。@awmross:Ah。你的问题中没有提到项目组。我正在使用D2009和重构。据我所知,他们正在一个项目组中跨项目工作(当然,前提是您打开了该组)。当我重命名共享单元中的类或方法时,它在所有项目中的所有引用都会更改。诚然,我主要使用“重命名”重构。。。我不知道其他的。@Marjan:我在2006年或2010年都没有这样做过。是否将重命名的类添加到其他项目文件中?或者他们只是在这些项目的搜索路径上?“查找参考资料”是否也能跨项目工作(对我来说不是这样)。我们将“库”项目安装为设计时库。也许这就是问题所在。嗯,是的,我确实在每个使用它的项目中添加了共享单元。我不为“自己的”代码使用库路径,只为第三方库使用。这是一点额外的工作,但它使依赖项显式化,并有助于避免由于隐式使用库路径上可能潜伏的“旧”dcu而导致的问题。啊,当你有相同的单位名称,不同的项目有不同的内容时,这也很有帮助。对于共享单元使用的特定于项目的代码非常有用。共享单元只使用“unit1”,dpr会说是哪一个。比使用库路径更显式,更不容易出错。考虑到其他语言能够做到这一点,我不确定这是不可能的。也许是Delphi(语言)的某些特性使得构建这样的编译器变得不可能。Delphi有一个单通道编译器。这就是为什么它是如此之快,但也为什么有些错误只是终端。正如我已经说过的,在某些情况下,它可以发现不止一个错误。换句话说,如果我把所有的课都放在一个大单元里,而不是把每个课放在一个单独的单元里,我可以一次看到单元里的所有错误。正如你所暗示的,这对于我们今天所做的项目的规模来说是不现实的(有过吗?)。我当然从未见过一个Java jar将其全部源代码放在一个.Java文件中@有意思,但完全错了。Eclipse可以显示所有Java文件中的所有错误。Delphi显然也能做到这一点,至少在
实现中存在错误。即使是
接口
部分中的错误也不会妨碍编译不依赖于错误单元的单元。真正的原因可能是Delphi开发人员认为这个功能不够有用。@maaartinus-我不这么认为