Visual Studio - Interner Compilerfehler

23 Dec 2015
1,293
1,315
#1
Hey,

ich arbeite seit einer Weile an einem kleinen Projekt, an welchem ich hin und wieder etwas mache.
Habe gestern Abend noch ein paar Kleinigkeiten hinzugefügt, compiled und getestet.
Habe dann in der Main einen Sleep zwischen CreateThread eingefügt und ab dann bekamm ich 3 Fehlermeldungen:
  • LNK1000 - Internal error during IMAGE::BuildImage
  • C1001 - Interner Compilerfehler (zwei Mal)
Habe dann die Zeilen zunächst auskommentiert, bekamm aber den gleichen Fehler, sodass ich diese dann gelöscht hab und am gleichen Stand bin wie zuvor, als das compilen noch problemlos funktionierte.

Hab es im Release als auch im Debugmodus versucht. Debug ging beim ersten Mal, gab mir dann aber einen Fehler aus. Beim zweiten Debuggen, ohne eine Veränderung, ging es dann nicht mehr.

Hier die Ausgabe:

Code:
1>Code wird generiert.
1>  link!InvokeCompilerPass()+0x24bfa
1>  link!InvokeCompilerPass()+0x24bfa
1>  link!InvokeCompilerPass()+0x1e841
1>LINK : fatal error C1001: Interner Compilerfehler.
1>(Compilerdatei "f:\dd\vctools\compiler\utc\src\p2\main.c", Zeile 258)
1>  link!DllGetC2Telemetry()+0xf2634
1> Vereinfachen oder ändern Sie das Programm im Umfeld der oben aufgeführten Positionen. Wählen
1>Sie im Menü "Hilfe" von Visual C++ den Befehl "Technischer Support",
1>oder öffnen Sie die Hilfedatei des technischen Supports, um weitere Informationen zu erhalten.
1>  link!CloseTypeServerPDB()+0xc5fa3
1>
1>LINK : fatal error C1001: Interner Compilerfehler.
1>(Compilerdatei "f:\dd\vctools\compiler\utc\src\p2\main.c", Zeile 258)
1> Vereinfachen oder ändern Sie das Programm im Umfeld der oben aufgeführten Positionen. Wählen
1>Sie im Menü "Hilfe" von Visual C++ den Befehl "Technischer Support",
1>oder öffnen Sie die Hilfedatei des technischen Supports, um weitere Informationen zu erhalten.
1>  link!InvokeCompilerPass()+0x24bfa
1>  link!InvokeCompilerPass()+0x1e841
1>  link!DllGetC2Telemetry()+0xf2634
1>  link!CloseTypeServerPDB()+0xc5fa3
1>
1>
1>LINK : fatal error LNK1000: Internal error during IMAGE::BuildImage
1>
1>  Version 14.12.25835.0
1>
1>  ExceptionCode            = C0000005
1>  ExceptionFlags           = 00000000
1>  ExceptionAddress         = 50DB7C17 (50980000) "I:\VIS\VC\Tools\MSVC\14.12.25827\bin\HostX86\x86\c2.dll"
1>  NumberParameters         = 00000002
1>  ExceptionInformation[ 0] = 00000000
1>  ExceptionInformation[ 1] = 01D41284
1>
1>CONTEXT:
1>  Eax    = 01D41200  Esp    = 00DFE410
1>  Ebx    = 00000000  Ebp    = 00DFE448
1>  Ecx    = 00000000  Esi    = 01D41284
1>  Edx    = 0686602C  Edi    = 00000000
1>  Eip    = 50DB7C17  EFlags = 00010206
1>  SegCs  = 00000023  SegDs  = 0000002B
1>  SegSs  = 0000002B  SegEs  = 0000002B
1>  SegFs  = 00000053  SegGs  = 0000002B
1>  Dr0    = 00000000  Dr3    = 00000000
1>  Dr1    = 00000000  Dr6    = 00000000
1>  Dr2    = 00000000  Dr7    = 00000000
1>Die Erstellung des Projekts ist abgeschlossen -- FEHLER.
========== Erstellen: 0 erfolgreich, 1 fehlerhaft, 0 aktuell, 0 übersprungen ==========
Hab dann im MSDN und bei Google gesucht. Soll wohl an der Optimierung des Codes liegen und das kann ich bestätigen. Compilen funktionierte, nachdem ich:
Code:
  #pragma optimize("", off)
gestzt hatte.
Sobald ich es entferne, kann ich es einmal wieder neu compilieren und beim zweiten Mal wieder das gleiche Problem.

Allerdings wäre das nur ein sub-optimaler Lösungsansatz und bringt mir in Endeffekt nichts. Verstehe nur nicht ganz wieso, da ich außer die neue Funktion und 2 Sleeps nichts geändert hatte und diese auch wieder entfernt wurden.

Falls nötig, kann ich gerne den Code posten. Vielleicht wird auch so jemand daraus schlau.

Ahja: Visual Studio 2017 - Version 15.5.7

Danke im Voraus
 

rn_

wo ist mein admin rang seal
7 Jan 2011
5,521
9,916
#2
Benutzt du die runtime XOR encryption class von @frk? Falls ja darfst du solche strings niemals an Funktionen wie printf, sprintf, etc übergeben. Also all das was ne arglist hat.
 
23 Dec 2015
1,293
1,315
#3
Benutzt du die runtime XOR encryption class von @frk? Falls ja darfst du solche strings niemals an Funktionen wie printf, sprintf, etc übergeben. Also all das was ne arglist hat.
Nein, ist ganz simpel geschrieben. Hab das Meiste selbst geschrieben, nur bei der MC ein bisschen Hilfe bekommen.
Keine Encryption etc vorhanden, da ich es nur selbst benutze.