【发布时间】:2016-08-25 13:50:53
【问题描述】:
我有一个 DPK 项目,它有时会在编译(到 Delphi IDE)时显示错误(“内存不足”),有时它会成功编译。
但是,当我尝试通过MSBUILD 编译它时,它总是抛出这个错误消息:
错误 F2084:内部错误:AV004A784A-WFFFD3764-1
有人有办法解决吗?
【问题讨论】:
标签: delphi compiler-errors delphi-xe3
我有一个 DPK 项目,它有时会在编译(到 Delphi IDE)时显示错误(“内存不足”),有时它会成功编译。
但是,当我尝试通过MSBUILD 编译它时,它总是抛出这个错误消息:
错误 F2084:内部错误:AV004A784A-WFFFD3764-1
有人有办法解决吗?
【问题讨论】:
标签: delphi compiler-errors delphi-xe3
这样的内部错误是编译器错误。我们无法解决它们,只有编译器开发人员才能解决。您需要向 Embarcadero 提交错误报告。鉴于 XE3 的年代久远,您不太可能得到修复。
现代版本的 Delphi 不太容易出现内存不足故障,因此如果可以选择升级,那么这样做可能会避开问题。
如果升级不是一种选择,那么每次遇到这些错误之一时,您可能不得不继续得过且过和诅咒。
【讨论】:
这实际上很常见(至少我经常遇到这类错误)。我确实采用了从 DPK 中逐步删除源代码文件的方法,直到编译成功。这样你也能看到是哪个文件导致了这些错误,然后一步一步注释掉这个文件中的源代码部分,直到你找到有问题的行,然后重写它(你需要以什么方式找出自己)。
【讨论】:
正如 David Heffernan 已经说过的,没有办法真正解决它,因为错误是编译器或链接器内部的,只有这些开发人员才能消除该错误。
但通常有一些解决方法。
根据我的经验,此类内部错误通常与泛型和匿名方法有关,或者与内联代码有关,尤其是当其中两个或所有这些结合在一起时。
因此,找出您在内部错误发生之前所做的代码更改。如果您使用版本控制系统或 Delphi 的内部 _history 系统,请恢复到以前的版本,直到错误消失。然后你可以对你的“违规”代码做一个改变,看看是哪个代码导致了内部错误。
通常,过于复杂的表达式(尤其是我上面提到的类型)会导致内部错误。如果是这种情况,请尝试通过首先计算子表达式来简化表达式。此外,不要使用像
这样的临时通用声明x := TList<SomeType<Integer>>.Create;
你应该尝试使用预定义的类型:
type
SomeTypeInteger = SomeType<Integer>;
SometypeList = TList<SomeTypeInteger>;
...
x := SometypeList.Create;
换句话说,
如果您这样做,您可能会成功避免内部错误。它经常花费我一些时间,但我总能找到一种方法来实现我想要的。如果不能,请在此处询问具体错误(通过发布有问题的代码、确切的错误,如果可能,请提供Minimal, Complete, and Verifiable example)。
幸运的是,这些错误在最新的编译器中变得非常罕见。
【讨论】: