我有一个DPK项目,有时会在编译(进入Delphi IDE
)时显示错误("内存不足和#34;),有时它会成功编译。
但是,当我尝试通过MSBUILD
进行编译时,它总是会抛出此错误消息:
错误F2084:内部错误:AV004A784A-WFFFD3764-1
有人有想法解决它吗?
答案 0 :(得分:3)
这样的内部错误是编译器错误。我们无法解决它们,只有编译器开发人员才能解决它们。您需要向Embarcadero提交错误报告。鉴于XE3的古老性,你不太可能得到修复。
现代版本的Delphi不太容易出现内存故障,因此如果升级是一种选择,那么这样做可能会使问题边缘化。
如果升级不是一个选项,那么每次遇到其中一个错误时,你可能不得不继续混淆和诅咒。
答案 1 :(得分:2)
这实际上非常普遍(至少我经常遇到这类错误)。我确实采用了从DPK逐步删除源代码文件的方法,直到编译工作。通过这种方式,您还可以看到导致这些错误的文件,然后继续并逐步退出此文件中的源代码部分,直到找到有问题的行,然后重写它(以您需要以何种方式查找自己)。
答案 2 :(得分:2)
正如David Heffernan所说,你无法真正解决它,因为错误是编译器或链接器的内部错误,只有这些错误的开发人员可以删除该错误。
但通常,有一些解决方法。
根据我的经验,这些内部错误通常与泛型和匿名方法或内联代码有关,特别是如果将两个或所有这些组合在一起。
因此,找出在发生内部错误之前所做的代码更改。如果您使用版本控制系统或Delphi的内部_history系统,请恢复到以前的版本,直到错误消失为止。然后你可以对你的“违规”代码做些改变,看看哪些代码导致了内部错误。
通常,过于复杂的表达式(特别是对于我上面提到的类型)会导致内部错误。如果是这种情况,请尝试通过首先计算子表达式来简化表达式。此外,而不是使用像
这样的临时通用声明x := TList<SomeType<Integer>>.Create;
你应该尝试使用预定义的类型:
type
SomeTypeInteger = SomeType<Integer>;
SometypeList = TList<SomeTypeInteger>;
...
x := SometypeList.Create;
换句话说,
如果您这样做,您可能会成功避免内部错误。它经常花费我一些时间,但我总能找到一种方法来实现我想要的。如果你不能,请在这里询问具体的错误(通过发布有问题的代码,确切的错误,如果可能的话Minimal, Complete, and Verifiable example)。
幸运的是,这些错误在最新的编译器中变得非常罕见。