Ich habe mit iexplore gesurft und es stürzte mit der Meldung ab
C000041D
dh
Unbehandelte Ausnahme bei 0x7149B7C0 in iexplore.exe: 0xC000041D: Während eines Benutzer-Rückrufs ist eine unbehandelte Ausnahme aufgetreten.
Soweit ich weiß, steht 0x für Hex-Code, 714 ist der Programmzähler und C00 ist der Fehlercode. Was kann ich tun, um diesen Fehler zu untersuchen? Ich habe Visual Studio ausgeführt, das das Programm erkannt hat.
Antwort1
Ich habe festgestellt, dass 0xC000041d = STATUS_FATAL_USER_CALLBACK_EXCEPTION.
Es scheint, dass die Anwendung mit dem abnormalen Code 0xc000041d beendet wird, weil die App einen frühen Thread erstellt hat.
Klicken Sie hier, um mehr zu lesen und die Quelle anzuzeigen..
Antwort2
0xC000041d
ist einNTSTATUSCodekonstante definiert in Microsoftsntstatus.hHeader-Datei:
Der Definitionsname ( MessageId
) ist STATUS_FATAL_USER_CALLBACK_EXCEPTION
und seine Beschreibung ist:
"An unhandled exception was encountered during a user callback."
NTSTATUSCodes werden typischerweise bei der Kommunikation von Systeminformationen verwendet, z. B. zwischen dem Windows-System und Gerätetreibern und manchmal zwischen Windows und Anwendungen:
- https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/c8b512d5-70b1-4028-95f1-ec92d35cb51S
- https://www.osr.com/blog/2020/04/23/ntstatus-to-win32-error-code-mappings/
Die Bedeutung desNTSTATUSDer Code kann auch mit dem Microsoft Error Lookup Tool nachgeschlagen werden:
Wie die Beschreibung schon andeutet, verwendet Windows diese spezielleNTSTATUSCode, wenn er beim Aufrufen eines Benutzermodus (https://www.tutorialspoint.com/User-Mode-vs-Kernel-Mode) Rückruffunktion (https://en.wikipedia.org/wiki/Callback_(Computerprogrammierung)).
Es gibt viele Situationen, die diese Meldung erzeugen können. Daher ist eine Suche im Internet nur auf derNTSTATUSCode 0xC000041d
liefert möglicherweise nicht verwandte Ergebnisse. Relevantere Ergebnisse werden möglicherweise angezeigt, wenn auch der genaue Dateiname des Prozesses (in diesem Fall iexplore.exe), des fehlerhaften Moduls (siehe unten) und/oder vielleicht sogar die genaue Speicheradresse (in diesem Fall 0x7149B7C0
) angegeben wird.
Die Suche nach der vollständigen Speicheradresse kann etwas knifflig sein, da es leicht unterschiedliche Kompilierungen/Build-Versionen des Programms gibt, verschiedene Ausführungsmodelle (z. B. 32-Bit- und 64-Bit-Versionen von Windows) und weil die Module (.dll-, .exe-, .sys-Dateien usw., die zusammen den ausgeführten Programmcode bilden) an unterschiedlichen Basisadressen geladen werden. Eine Übereinstimmung nur der letzten vier Zeichen B7C0
der Adresse kann ausreichen, um auf ein verwandtes Problem hinzuweisen.
Um das Problem tatsächlich zu debuggen, kann Visual Studio verwendet werden, um den Aufrufstapel des Threads anzuzeigen, der die Ausnahme verursacht:
https://stackoverflow.com/questions/945193/wie-finde-ich-den-Stack-Trace-in-Visual-Studio
Der Aufrufstapel zeigt die verschiedenen Module und Methoden in diesen Modulen, die sich gegenseitig aufgerufen haben, als die Ausnahme auftrat. Die Modulnamen können einen Hinweis darauf geben, was das Programm tat, als das Problem auftrat.
Wenn Symbole (https://devblogs.microsoft.com/devops/understanding-symbol-files-and-visual-studios-symbol-settings/) für die Module verfügbar sind, die das Problem verursachen – und möglicherweise sogar die Quellcodedateien dieser Module – wird das Debuggen einfacher.