2016-08-25 4 views
3

Ich habe ein DPK-Projekt, das manchmal Fehler zeigt ("out of memory") beim Kompilieren (in Delphi IDE), und irgendwann kompiliert es mit Erfolg. Aber, wenn ich es versuchen, kompilieren durch die MSBUILD, es wirft immer diese Fehlermeldung:Delphi Interner Fehler beim Kompilieren eines DPK-Projekts

error F2084: Internal Error: AV004A784A-WFFFD3764-1

Jemand eine Idee, es zu lösen haben?

Antwort

3

Ein interner Fehler wie dieser ist ein Compilerfehler. Wir können sie nicht lösen, nur der Compiler-Entwickler kann das tun. Sie müssen Embarcadero einen Fehlerbericht senden. Angesichts der Antike von XE3 werden Sie wahrscheinlich nie eine Lösung erhalten.

Moderne Versionen von Delphi sind weniger anfällig für Speichermangel. Wenn das Upgrade daher eine Option ist, wird dies wahrscheinlich das Problem umgehen.

Wenn die Aktualisierung keine Option ist, dann müssen Sie sich wahrscheinlich jedes Mal, wenn Sie auf einen dieser Fehler stoßen, verarschen und fluchen.

2

Dies ist tatsächlich sehr häufig (zumindest ich diese Art von Fehlern sehr oft erlebt). Ich ging mit dem Ansatz, Quellcode-Dateien Schritt für Schritt aus dem DPK zu entfernen, bis das Kompilieren funktioniert. Auf diese Weise sehen Sie auch, welche Datei diese Fehler verursacht, dann gehen Sie voran und quellen Quellcode-Teile in dieser Datei Schritt für Schritt aus, bis Sie die betreffende Zeile gefunden haben, und schreiben Sie sie dann neu (auf welche Weise Sie selbst herausfinden müssen).

2

Wie David Heffernan bereits gesagt hat, gibt es keine Möglichkeit, es wirklich zu lösen, weil der Fehler im Compiler oder Linker intern ist, und nur die Entwickler von diesen können diesen Fehler entfernen.

Aber oft gibt es einige Problemumgehungen.

Meiner Erfahrung nach hängen solche internen Fehler oft mit generischen und anonymen Methoden oder mit inline-Code zusammen, besonders wenn zwei oder alle kombiniert sind.

So finden Sie heraus, welche Codeänderung Sie vorgenommen haben, bevor der interne Fehler aufgetreten ist. Wenn Sie ein Versionsverwaltungssystem oder das interne _history-System von Delphi verwenden, stellen Sie eine vorherige Version wieder her, bis der Fehler behoben ist. Dann können Sie einen Unterschied mit Ihrem "beleidigenden" Code machen und sehen, welcher Code den internen Fehler verursacht hat.

Oft führen zu komplexe Ausdrücke (besonders für die oben genannten Typen) zu internen Fehlern. Wenn dies der Fall ist, versuchen Sie, die Ausdrücke zu vereinfachen, indem Sie zuerst Unterausdrücke berechnen. Auch anstelle der Verwendung von Ad-hoc-generic Erklärungen wie

x := TList<SomeType<Integer>>.Create; 

sollten Sie versuchen, vordefinierte Typen zu verwenden:

type 
    SomeTypeInteger = SomeType<Integer>; 
    SometypeList = TList<SomeTypeInteger>; 

    ... 

    x := SometypeList.Create; 

Mit anderen Worten,

  • versuchen zu finden, die " Beleidigender "Code durch Zurückgehen in Ihrer Geschichte, bis es weggeht
  • Sobald Sie es gefunden haben, versuchen Sie, diesen Teil des Codes zu vereinfachen. Entwirren Ausdrücke und vordefinieren Typen
  • experimentieren mit verschiedenen Möglichkeiten, den Code zum Ausdruck bringen, bis der Fehler weg

geht Wenn Sie das tun, können Sie bei der Vermeidung des internen Fehlers erfolgreich sein.Es hat mich oft etwas Zeit gekostet, aber ich habe immer einen Weg gefunden, das zu erreichen, was ich wollte. Wenn Sie nicht können, fragen Sie hier nach bestimmten Fehlern (indem Sie den fehlerhaften Code, den genauen Fehler und wenn möglich eine Minimal, Complete, and Verifiable example) eingeben.

Glücklicherweise sind diese Fehler in den neuesten Compilern sehr selten geworden.

Verwandte Themen