Viele Benutzer von Windows-Betriebssystemen müssen früher oder später herausfinden, warum ihr Lieblingsbetriebssystem "in BSOD fällt".
Es wurde bereits viel darüber geschrieben, wie man im Internet nach einer Ursache sucht und diese (je nach Situation) behebt. Was kann ich jedoch tun, wenn ich die Ursache so schnell wie möglich herausfinden muss und dies regelmäßig tun muss, z. B. Servicemitarbeiter oder Stammgäste in Computerforen?

Die berüchtigten Änderungen des Kontextmenüs können die Aufgabe vereinfachen, da sie ganz einfach vorgenommen werden.
VorbereitungZuerst müssen Sie das Paket mit dem Debugger windbg.exe, der Konsolenversion von kd.exe und anderen erforderlichen Inhalten installieren.
Dies sind die Pakete
X64 Debugger und Tools-x64_en-us.msi oder
X86 Debugger und Tools-x86_en-us.msi , die je nach Bittiefe des verwendeten Betriebssystems und / oder persönlichen
Einstellungen ausgewählt werden können.
Auf der Microsoft-Website finden Sie keine einzelnen Links. Diese Pakete sind jedoch Teil des
Windows-Treiberkits . Sie können sie herunterladen, ohne sie zu installieren, indem Sie den entsprechenden Installationsmodus auswählen. Die Pakete befinden sich nach Abschluss des Downloads im Ordner
\ Windows Kits \ 10 \ WDK \ Installers .
Wenn jemand es braucht, habe ich es separat auf I hochgeladen.
X64-Debugger und -Tools-x64_en-us.msiX86-Debugger und -Tools-x86_de-us.msiIch habe beschlossen, den Debugger nicht zu installieren, sondern nur msi zu entpacken:
msiexec /a "D:\Desktop\X64 Debuggers And Tools-x64_en-us.msi" /qb targetdir="D:\Desktop\Temp"
Diese "tragbare" Option ist mehr als genug. Nachdem ich den gewünschten Inhalt aus mehreren Unterordnern nach
C: \ Portable \ Debug verschoben habe, stellte sich
Folgendes heraus:
C:\Portable\Debug\windbg.exe
C:\Portable\Debug\kd.exe
+ alles andere. Wir werden in Zukunft auf diesem Pfad aufbauen (und ich habe ihn der Einfachheit halber erneut zu% PATH% hinzugefügt).
Dabei können die vorbereitenden Maßnahmen als abgeschlossen betrachtet werden und der Prozess der Erstellung einer Optimierung beschrieben werden.
Da meine Aufgabe davon ausgeht, dass es viele und häufig Dumps gibt, muss ich den Prozess so weit wie möglich beschleunigen und ihn gleichzeitig informativ genug für eine schnelle Analyse machen.
Umgang mit Schlüsseln und Debugger-Befehlen
Nehmen wir als Grundlage für die zukünftige Optimierung eine solche Batch-Datei, auf die es ausreicht, den gewünschten Speicherauszug zu ziehen.
Zur besseren Wahrnehmung von Informationen habe ich nach meinem Verständnis die Farben der Konsole invertiert und die Größe des Konsolenfensters größer eingestellt.
@echo off title text %1 mode con: cols=170 color F0 title "%1" kd.exe -nosqm -sup -z "%1" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c ^ "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q"" pause exit /b
Hier sehen Sie die von kd.exe übertragenen Parameter wie
-y ,
-i und
-z , die von allen gesehen wurden, die sich mit
kdfe.cmd auskennen und in engen Kreisen weithin bekannt sind.
-i !ImagePath! specifies the location of the executables that generated the fault (see _NT_EXECUTABLE_IMAGE_PATH) -y !SymbolsPath! specifies the symbol search path (see _NT_SYMBOL_PATH) -z !CrashDmpFile! specifies the name of a crash dump file to debug
Wenn wir es analog zu allgemeinen Anweisungen nehmen, gibt es geringfügige Unterschiede:
-nosqm und
-sup werden zusätzlich als Argumente übergeben.
-nosqm disables SQM data collection/upload. -sup enables full public symbol searches
Als Teams:
!cpuid !sysinfo cpuinfo !sysinfo cpuspeed !sysinfo machineid
Ich werde sie nicht malen, weil zu viele Copy-Paste herauskommen werden. Interessenten finden die detaillierte Hilfe von debugger.chm in einer der beiden oben genannten * .msi oder unter docs.microsoft.com
-cpuid -sysinfo . Kurz gesagt, grundlegende Informationen über die Drüse des Opfers.
Die Skriptausgabe mit kd.exe entspricht fast derjenigen, die bei der direkten Arbeit mit windbg erzielt worden wäre. Das Ergebnis wird jedoch viel schneller erzielt, da Sie nichts öffnen, Ordner konfigurieren, den Speicherauszug über das Menü öffnen und Befehle in den Debugger eingeben müssen.
Filtern der Müllausgabe von der Konsole
Nehmen wir für das erste Beispiel einen Speicherauszug eines zufälligen Benutzers. Es gibt ein kleines Problem mit dem Müll in der Ausgabe:
Screenshot einer Konsolenausgabe Dies findet sich beispielsweise in Dumps von Benutzern, die den Odin-Aktivator verwenden, den wir in diesem Beispiel sehen.
Die vollständige Ausgabe ist aufgrund des Links zum
Pastebin ziemlich umfangreich.
Es ist erforderlich, unnötige Zeilen "herauszufiltern" und nur nützliche Informationen zu hinterlassen.
Ich habe
findstr verwendet , es stellte sich als so hässliche, aber funktionierende Lösung heraus:
findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Hier verwendet findstr zwei Stammgäste: Eine sucht nach Zeilen, die mit drei Sternchen, einem Leerzeichen beginnen und mit einem Leerzeichen und drei Sternchen enden. Die zweite sucht nach Zeilen, die mit 14 Sternen beginnen. Mit findstr könnte ich nichts Verständlicheres machen.
(Ich empfehle nicht, Zeilenabschlusszeichen in den Findst-Routinen auf dem kd.exe-Auspuff zu verwenden. Es kann Probleme mit der Art der von kd.exe angezeigten Zeilenenden geben. Anstelle von
\ r \ n können Sie
\ n erhalten, dass findstr das Zeilenende nicht berücksichtigt. Ein solcher Rechen für sich selbst.)
Der gesamte Code der vorläufigen Batchdatei mit dem "Filter" stellte sich wie folgt heraus:
@echo off title text %1 mode con: cols=170 color F0 title "%1" kd.exe -nosqm -sup -z "%1" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" pause exit /b
Die vollständige Ausgabe der gefilterten Version befindet sich ebenfalls im
Pastebin .
Das Ergebnis ist ähnlich, aber ohne „Müll“. 290 Textzeilen gegenüber 894. Schon besser, aber nicht alle.
Schnelle Erstellung des Debugger-Protokolls
Der nächste Schritt ist das Hinzufügen eines Protokolls, das veröffentlicht oder irgendwohin gesendet werden kann.
Übergeben Sie dazu kd.exe das Argument -loga <"P: \ to the \ log.log">
Der Code hat folgende Form:
@echo off title text %1 mode con: cols=170 color F0 title "%1" set "D=%1" set L=%D:.dmp=.LOG% kd.exe -nosqm -sup -loga "%L%" -z "%D%" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" pause exit /b
Ein Protokoll
102516-21949-01.LOG wird für die Datei
102516-21949-01.dmp im selben Ordner wie der
Speicherauszug selbst generiert.
In diesem Fall wird die Ausgabe von "Garbage" in das Protokoll nicht gefiltert, sondern nur die Ausgabe in die Konsole. In meinem Fall ist dies jedoch nicht wichtig, obwohl Sie dies beheben können, indem Sie das Protokoll nach der Erstellung löschen:
@echo off title text %1 mode con: cols=170 color F0 title "%1" set "D=%1" set L=%D:.dmp=.LOG% kd.exe -nosqm -sup -loga "%L%" -z "%D%" ^ -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols ^ -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" set CL=%L:.LOG=_CLEAN.LOG% type "%L%" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*" >> "%CL%" del /f /q "%L%" pause exit /b
Öffnen einer Müllkippe in Windbg
Jetzt der letzte Schritt in der richtigen Reihenfolge, aber nicht wichtig: Sie müssen in der Lage sein, den Speicherauszug direkt an windbg.exe zu übertragen und sofort Befehle an ihn zu übergeben, die Sie höchstwahrscheinlich eingeben müssen. Alles geschieht analog zu kd.exe, die von windbg.exe empfangenen Argumente und Befehle sind fast identisch mit kd.exe
@echo off windbg.exe -z "%1" -sup -y ^ "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -i "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid" exit /b
Infolgedessen wird der Speicherauszug sofort im Debugger geöffnet und die im Schlüssel
-c aufgeführten Befehle werden automatisch darin ausgeführt.
Die Schlussfolgerung ähnelt der allerersten Option mit dem Unterschied, dass der Speicherauszug sofort in windbg geöffnet wird. Aufgrund des Fehlens des Befehls
q in der Liste der übertragenen Befehle können Befehle zur weiteren Analyse eingegeben werden.
(Wenn Sie in früheren Versionen des Skripts mit kd.exe den Befehl
q entfernen, der in der Befehlsliste über das Argument
-c übergeben wird , wird dort die Möglichkeit angezeigt, mit dem Speicherauszug weiterzuarbeiten, einschließlich der Aufzeichnung des Protokolls direkt im Prozess.)
Kreation optimieren
Jetzt muss all dies geändert werden, damit Sie * .dmp-Dateien mit dem Kontextmenü verknüpfen können. Eigentlich für das, was es vorhatte.
Hier sind die folgenden "Einzeiler":
Für die Option mit Konsolenausgangsfilterung cmd /d /k mode con: cols=170 & color F0 & title "%1" & kd.exe -nosqm -sup -z "%1" -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Für die Option zum Filtern der Konsolenausgabe und Erstellen einer Protokolldatei(musste eine
verzögerte Variablenerweiterung verwenden )
cmd /d /v /k mode con: cols=170 & color F0 & title "%1" & set "D=%1"& set L=!D:.dmp=.LOG! & kd.exe -nosqm -sup -loga "!L!" -z "!D!" -y srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -i srv*"C:\Symbols"*http://msdl.microsoft.com/download/symbols -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q" | findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
So öffnen Sie einen Speicherauszug direkt in windbg.exe "C:\Portable\Debug\windbg.exe" -z "%1" -sup -y "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -i "srv*C:\Symbols*http://msdl.microsoft.com/download/symbols" -c "!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid"
In der Registrierung habe ich die folgende Partitionsstruktur erstellt:

In den Registrierungsschlüsseln, an denen Änderungen vorgenommen wurden, wurde ein
separater Dateityp dmp_geek erstellt . Dateien mit der Erweiterung * .dmp wurden Dateien vom Typ
dmp_geek zugewiesen.
In jedem Befehlsabschnitt wurden dem Zeichenfolgenparameter standardmäßig die entsprechende einzeilige + Schönheit in Form von Symbolen und praktischen Namen für die im Kontextmenü angezeigten Elementnamen hinzugefügt.

Es stellte sich heraus, dass eine Optimierung die Möglichkeit bietet, die im Ordner ausgewählten Speicherauszüge sowohl in der Konsole als auch im Debugger massiv zu öffnen, indem nach "Müll" gefiltert und bei Bedarf Protokolle für jeden Speicherauszug erstellt werden. Das spart viel Zeit.
Exportieren Sie nach dem Kämmen der Registrierung alles in die endgültige REG-Datei, die zur Verwendung bereit ist.
Der Inhalt der REG-Datei Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.dmp] @="dmp_geek" [HKEY_CLASSES_ROOT\dmp_geek] @="dmp_geek" "FriendlyTypeName"=" " [HKEY_CLASSES_ROOT\dmp_geek\DefaultIcon] @="imageres.dll,142" [HKEY_CLASSES_ROOT\dmp_geek\shell] [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe] "MUIVerb"="Kd.exe" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe\command] @="cmd /d /k mode con: cols=170 & color F0 & title \"%1\" & \"C:\\Portable\\Debug\\kd.exe\" -nosqm -sup -z \"%1\" -y srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -i srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q\" | findstr /r /v /c:\"^\\*\\*\\* .* \\*\\*\\*\" /c:\"^\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*.*\"" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe_-loga] "MUIVerb"="Kd.exe -loga" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\kd.exe_-loga\command] @="cmd /d /v /k mode con: cols=170 & color F0 & title \"%1\" & set \"D=%1\"& set L=!D:.dmp=.LOG! & \"C:\\Portable\\Debug\\kd.exe\" -nosqm -sup -loga \"!L!\" -z \"!D!\" -y srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -i srv*\"C:\\Symbols\"*http://msdl.microsoft.com/download/symbols -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid; q\" | findstr /r /v /c:\"^\\*\\*\\* .* \\*\\*\\*\" /c:\"^\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*\\*.*\"" [HKEY_CLASSES_ROOT\dmp_geek\shell\Open] "MUIVerb"="Windbg" "Icon"="C:\\Portable\\Debug\\windbg.exe,6" [HKEY_CLASSES_ROOT\dmp_geek\shell\Open\command] @="\"C:\\Portable\\Debug\\windbg.exe\" -z \"%1\" -sup -y \"srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols\" -i \"srv*C:\\Symbols*http://msdl.microsoft.com/download/symbols\" -c \"!analyze -v; !cpuid; !sysinfo cpuinfo; !sysinfo cpuspeed; !sysinfo machineid\""
→ Download von Ya.Disk
GEEK_DMP.regDas ist alles Jetzt können Sie schnell, wenn auch oberflächlich, sofort eine Reihe von Dumps analysieren.
Verwendete Materialien, Quellen, nützliche Links zum Thema: