2010-12-03 14 views
4

Ich bekomme eine schöne BSOD beim Booten (STOP: 0x0000007E) von einem Treiber, den ich schreibe, und möchte den Speicherauszug für die Analyse laden. Es wird jedoch nirgends abgeladen. Alles ist in den Einstellungen für Start und Wiederherstellung korrekt eingerichtet, aber ich erhalte keine Speicherauszugsdatei und nichts im Ereignisprotokoll, das einen Speicherauszug anzeigt, hat stattgefunden. Es sieht aus wie ein Dump nicht einmal vorkommt ...Wie bekomme ich Speicherauszug nach blauem Bildschirm

Ich kenne die genaue Zeile des Codes verursacht es (ein Anruf an IoAttachDevice()), aber ich bin mir nicht sicher, warum, und möchte die DbgPrint Ausgabe sehen, wo genau es versagt. Könnte Windows möglicherweise abstürzen, bevor die Dump-Funktion eingerichtet ist? Wenn ja, wie bekomme ich Zugriff auf den Zustand der Maschine, wenn der Fehler auftritt?

UPDATE: Andere möglicherweise nützliche Informationen: Ich verwende Windows XP über VirtualBox auf einem Linux-Host.

+0

Wenn Sie Windows-Kernel-Programmierung durchführen, möchten Sie eine Windows-VM auf einem Windows-Host. –

+0

@BenVoigt Warum nicht Windows VM auf einem Linux Host? –

+0

Konfigurieren Sie [Boot-Debugging] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff542183%28v=vs.85%29.aspx)? –

Antwort

2

Ich weiß nicht, warum Sie nicht eine Dump-Datei erhalten, aber wenn Sie Zugriff auf die Maschine haben, hängen Sie einen Kernel-Debugger an eine Repro der Fehler - Sie werden mit der Maschine sitzen bleiben der Debugger, bereit zu gehen (Sie können den Debugger die Dumpdatei für Sie erzeugen lassen, wenn Sie auch offline debuggen wollen).

+0

Siehe mein Update. Ich laufe durch VirtualBox von einem Linux-Host, also kann ich keinen Remote-Debugger einrichten (zumindest noch nicht). – user464164

+1

@ user464164: Sie können einen zweiten Windows-Gast starten und die virtuellen COM-Ports verbinden. Es ist eine Weile her, seit ich mit VBox gespielt habe, aber ich denke, Sie können ihm sagen, dass er UNIX-Domain-Sockets verwenden und dann ein externes Tool wie "socat" verwenden soll, um Daten zwischen ihnen zu puffern. – ephemient

+0

Um das hinzuzufügen ... Ich denke * die * sysinternals Jungs haben eine Erweiterung oder ein Addon für Windbag geschrieben, mit dem Sie Kernel-Debugging auf einem einzelnen Rechner durchführen können. Schauen Sie auf die sysinternals.com Seite und sehen Sie, was Sie finden. (Beachten Sie, dass sysinternals jetzt zur microsofts-Site umleitet.) – JimR

1

Klicken Sie mit der rechten Maustaste auf "Mein Computer", wählen Sie "Erweitert", klicken Sie unter "Start und Wiederherstellung" auf "Einstellungen". Wählen Sie "kernel memory dump" oder "complete memory dump".

+0

Haben Sie die Frage gelesen? –

1

Wie lautet die Starteinstellung Ihres Treibers? Wenn es zu früh in der Startreihenfolge startet, wird das Dateisystem möglicherweise noch nicht read-mounted Read-Write und daher gibt es keinen Platz für einen Speicherauszug zu gehen.

Treiber, die sich in der Entwicklung befinden, sollten im Allgemeinen nicht so eingestellt werden, dass sie automatisch gestartet werden, bis der Treiber stabil ist, wenn er später geladen wird. Natürlich müssen Sie es schließlich auf Autostart einstellen, damit Sie überprüfen können, ob es korrekt funktioniert, aber das kommt später.