9 Stimmen

Wie analysiere ich einen BSOD und die Fehlerinformationen, die er mir liefert?

Nun, zum Glück habe ich nicht viele Anwendungen geschrieben, die einen BSOD verursachen, aber ich frage mich, ob die Informationen auf diesem Bildschirm nützlich sind. Enthält er irgendwelche nützlichen Informationen, die mir helfen könnten, den Fehler in meinem Code zu finden? Wenn ja, was brauche ich genau?

Danach startet das System neu und hat wahrscheinlich ein Fehlerprotokoll oder andere Informationen in das System geschrieben. Wo befindet es sich, was enthält es und wie kann ich es nutzen, um meinen Code zu verbessern?

In der Vergangenheit habe ich regelmäßig einen BSOD bekommen, wenn ich mit einer Telefonanlage zu tun hatte, bei der die Dokumentation der Treiber einfach nicht vorhanden war, so dass ich etwas Trial-and-Error-Codierung betreiben musste. Glücklicherweise arbeite ich jetzt für ein anderes Unternehmen und erlebe keine BSODs mehr, die auf meinen Code zurückzuführen sind.

9voto

Stu Mackellar Punkte 11402

Wenn Sie einen relativ einfachen Weg suchen, um herauszufinden, was einen Betriebssystemabsturz verursacht hat, der in ~90% der Fälle funktioniert - vorausgesetzt, Sie haben einen Crash-Dump zur Verfügung - dann versuchen Sie Folgendes:

  • Laden Sie WinDbg als Teil des Fehlersuchwerkzeuge für Windows Paket. Beachten Sie, dass Sie nur die Komponente "Debugging Tools for Windows" installieren müssen.
  • WinDbg ausführen
  • Wählen Sie im Menü "Datei" die Option "Crash Dump öffnen".
  • Wenn die Dump-Datei geladen ist, geben Sie analyze -v und drücken Sie die Eingabetaste
  • WinDbg führt eine automatische Analyse des Absturzes durch und liefert eine große Menge an Informationen über den Systemzustand zum Zeitpunkt des Absturzes. Normalerweise kann es Ihnen sagen, welches Modul den Fehler verursacht hat und welche Art von Fehler den Absturz verursacht hat. Sie sollten auch einen Stack-Trace erhalten, der für Sie hilfreich sein kann oder auch nicht.
  • Ein weiterer nützlicher Befehl ist kb der einen Stack-Trace ausgibt. Suchen Sie in dieser Liste nach einer Zeile mit .sys . Dies ist normalerweise der Fahrer, der den Unfall verursacht hat.

Beachten Sie, dass Sie Folgendes tun müssen Symbole konfigurieren in WinDbg, wenn Sie möchten, dass der Stack-Trace die Funktionsnamen anzeigt. Um dies zu tun:

  • Erstellen Sie einen Ordner wie C:\symbols
  • In WinDbg öffnen Sie Datei -> Symboldateipfad
  • Hinzufügen: SRV*C:\symbols*http://msdl.microsoft.com/download/symbols

Dadurch werden Symboldateien von Microsofts Servern zwischengespeichert.

Wenn die automatische Analyse nicht ausreicht, gibt es eine Reihe von Befehlen, die WinDbg zur Verfügung stellt, um herauszufinden, was genau zum Zeitpunkt des Absturzes passiert ist. Die Hilfedatei ist eine gute Anlaufstelle für dieses Szenario.

3voto

1800 INFORMATION Punkte 125009

Im Allgemeinen können Sie keinen Betriebssystemabsturz oder eine Fehlerprüfung aus Ihrem Anwendungscode heraus verursachen. Wenn Sie jedoch nach allgemeinen Tipps und Informationen suchen, empfehle ich die NTDebugging-Blog . Das meiste davon ist mir zu hoch.

Was passiert, wenn das Betriebssystem abstürzt, ist, dass es eine Kernel-Dump-Datei schreibt, die je nach den aktuellen Flags und so weiter mehr oder weniger Informationen enthält. Sie können die Dump-Datei in windbg oder einem anderen Debugger laden. Windbg hat das nützliche !analyze Befehl, der die Dump-Datei untersucht und Ihnen Hinweise auf den Eimer gibt, in den der Absturz gefallen ist, sowie auf die möglichen Verursacher. Prüfen Sie auch die windbg-Dokumentation auf die allgemeine Ursache des Fehlers und was Sie tun können, um ihn zu beheben.

0 Stimmen

Sie können einen BSOD aus dem Code heraus auslösen, indem Sie einfach die entsprechende Windows-API-Methode aufrufen. Das ist es, was die meisten Gerätetreiber tatsächlich tun. Anstatt den Fehler zu beheben, versetzen sie das System einfach in den Panikmodus. Glücklicherweise versuchen die meisten modernen Gerätetreiber heutzutage, den Panikmodus zu vermeiden, und versuchen stattdessen, den Fehler zu beheben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X