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.