Debuggen eines User-Mode Fehlers mit KD
Um Fehler im Benutzermodus ordnungsgemäß zu debuggen, benötigen Sie CDB oder WinDbg. Manchmal wird jedoch eine Benutzermodus-Ausnahme in KD unterteilt, da kein Benutzermodusdebugger vorhanden ist. Es gibt auch Zeiten, in denen es hilfreich ist, beim Debuggen eines Kernelmodusproblems zu überwachen, welche spezifischen Benutzermodusprozesse ausgeführt werden.
Standardmäßig versucht der Kerneldebugger, das erste Benutzermodussymbol zu laden, das der angegebenen Adresse entspricht (für einen k-, u- oder ln-Befehl ).
Leider werden Benutzermodussymbole häufig nicht im Symbolpfad angegeben, oder das erste Symbol ist nicht das richtige. Wenn die Symbole nicht vorhanden sind, kopieren Sie sie entweder in den Symbolpfad, oder verwenden Sie einen Befehl .sympath (Set Symbol Path), um auf die vollständige Symbolstruktur zu zeigen, und verwenden Sie dann den Befehl .reload (Modul neu laden). Wenn das falsche Symbol geladen wird, können Sie ein Symbol explizit laden, indem Sie ".reload <binary.ext>" ausführen.
Die meisten Windows-DLLs werden neu basiert, sodass sie an verschiedenen Adressen geladen werden, es gibt jedoch Ausnahmen. Grafikkarten sind die häufigsten Ausnahmen. Es gibt Dutzende von Grafikkarten, die alle an derselben Basisadresse geladen werden, sodass KD fast immer ati.dll (das erste Videosymbol, alphabetisch) findet. Für Video ist auch eine .sys Datei geladen, die mithilfe des Befehls lm identifiziert werden kann. Mit diesen Informationen können Sie eine .reload-Datei ausgeben, um die richtigen Video-DLLs zu erhalten. Es gibt auch Zeiten, in denen der Debugger verwirrt wird und das Erneute Laden bestimmter Symbole hilft, den richtigen Stapel zu geben. Heben Sie die Funktionen auf, um zu überprüfen, ob die Symbole richtig aussehen.
Ähnlich wie bei den Video-DLLs werden fast alle ausführbaren Dateien an derselben Adresse geladen, sodass KD den Zugriff meldet. Wenn im Zugriff eine Stapelablaufverfolgung angezeigt wird, führen Sie einen !-Prozess und dann einen .reload des angegebenen namen der ausführbaren Datei aus. Wenn die ausführbare Datei keine Symbole im Symbolpfad enthält, kopieren Sie sie dorthin, und führen Sie erneut die Option .reload aus .
Manchmal treten bei KD oder WinDbg Probleme beim Laden der richtigen Benutzermodussymbole auf, auch wenn sich die vollständige Symbolstruktur im Symbolpfad befindet. In diesem Fall sind ntdll.dll und kernel32.dll zwei der am häufigsten benötigten Symbole. Beim Debuggen von CSRSS aus KD sind winsrv.dll und csrsrv.dll auch häufig zu ladende DLLs.