De nombreux utilisateurs de systèmes d'exploitation Windows, tôt ou tard, sont confrontés à la nécessité de savoir pourquoi leur système d'exploitation préféré "tombe dans le BSOD".
Beaucoup de choses ont déjà été écrites sur la façon de rechercher une cause et de la corriger (selon la situation) sur Internet, mais que dois-je faire si j'ai besoin de trouver la cause le plus rapidement possible et de le faire régulièrement, comme les techniciens ou les habitués des forums informatiques?

Les ajustements notoires du menu contextuel peuvent simplifier la tâche, car ils sont faits tout simplement.
La préparationVous devez d'abord installer le package avec le débogueur windbg.exe, la version console de kd.exe et d'autres contenus nécessaires.
Ce sont les packages
X64 Debuggers And Tools-x64_en-us.msi ou
X86 Debuggers And Tools-x86_en-us.msi à choisir en fonction de la profondeur de bits du système d'exploitation utilisé et / ou des préférences personnelles.
Vous ne trouverez pas de liens individuels sur le site Web de Microsoft, mais ces packages font partie du
Kit de pilotes Windows , vous pouvez le télécharger sans l'installer en sélectionnant le mode d'installation approprié, les packages seront dans le dossier
\ Windows Kits \ 10 \ WDK \ Installers une fois le téléchargement terminé.
Si quelqu'un en a besoin, je les ai téléchargés séparément sur I. Disque:
Débogueurs et outils X64-x64_en-us.msiDébogueurs et outils X86-x86_en-us.msiJ'ai décidé de ne pas installer le débogueur, mais simplement de décompresser msi:
msiexec /a "D:\Desktop\X64 Debuggers And Tools-x64_en-us.msi" /qb targetdir="D:\Desktop\Temp"
Cette option "portable" est plus que suffisante. Après, pour ma propre convenance, j'ai déplacé le contenu souhaité de plusieurs sous-dossiers vers
C: \ Portable \ Debug , afin qu'il
se révèle:
C:\Portable\Debug\windbg.exe
C:\Portable\Debug\kd.exe
+ tout le reste. Nous allons continuer sur cette voie à l'avenir (et je l'ai ajouté à nouveau à % PATH%, pour plus de commodité).
À ce stade, les mesures préparatoires peuvent être considérées comme terminées et décrire ensuite le processus de création d'un ajustement.
Étant donné que ma tâche suppose qu'il existe de nombreux et souvent des vidages, j'ai besoin d'accélérer le processus autant que possible, tout en le rendant suffisamment informatif pour une analyse rapide.
Gestion des clés et des commandes du débogueur
Comme base pour le futur ajustement, prenons un tel fichier batch, sur lequel il suffit de faire glisser le vidage souhaité.
Pour une meilleure perception de l'information, à ma connaissance, j'ai inversé les couleurs de la console et défini la taille de la fenêtre de la console plus grande.
@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
Ici, vous pouvez voir les paramètres transmis par kd.exe, tels que
-y ,
-i et, en fait,
-z , qui ont été vus par tous ceux qui connaissent
kdfe.cmd, largement connus dans les cercles étroits.
-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
Si nous le prenons par analogie avec des instructions communes, il y a de légères différences:
-nosqm et
-sup sont également passés comme arguments.
-nosqm disables SQM data collection/upload. -sup enables full public symbol searches
En équipes:
!cpuid !sysinfo cpuinfo !sysinfo cpuspeed !sysinfo machineid
Je ne les peindrai pas, car trop de copier-coller sortiront. Ceux qui sont intéressés pourront trouver l'aide détaillée de
debugger.chm dans l'un des deux * .msi mentionnés ci-dessus ou sur docs.microsoft.com
-cpuid -sysinfo . En bref, des informations de base sur la glande de la victime.
La sortie du script utilisant kd.exe se révélera être presque la même que celle qui aurait été obtenue en travaillant directement via windbg, mais le résultat est obtenu beaucoup plus rapidement car vous n'avez pas besoin d'ouvrir quoi que ce soit, de configurer des dossiers, d'ouvrir le vidage via le menu et d'entrer des commandes dans le débogueur.
Filtrer les déchets de la console
Pour le premier exemple, prenons un vidage de mémoire d'un utilisateur aléatoire. Il y a un petit problème avec les ordures dans la sortie:
Capture d'écran d'une sortie de console Cela se trouve, par exemple, dans les vidages d'utilisateurs utilisant l'activateur odin, que nous voyons dans cet exemple.
La sortie complète est assez massive, en raison du lien vers
pastebin .
Il est nécessaire de "filtrer" les lignes inutiles en ne laissant que des informations utiles.
J'ai utilisé
findstr , il s'est avéré une solution si moche mais fonctionnelle:
findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Ici, findstr utilise deux réguliers: l'un recherche les lignes commençant par trois astérisques, un espace et se terminant par un espace et trois astérisques. La seconde recherche des lignes commençant par 14 étoiles. Je ne pourrais rien faire de plus intelligible avec findstr.
(Je ne recommande pas d'utiliser les fins de ligne dans les habitués de findstr sur l'échappement kd.exe, il peut y avoir des problèmes avec le type de fins de ligne affiché par kd.exe. Au lieu de
\ r \ n, vous pouvez obtenir
\ n que findstr ne considère pas les fins de ligne. Un tel râteau pour vous-même.)
Le code complet du fichier de commandes préliminaire avec le "filtre" s'est avéré être:
@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
La sortie complète de la version filtrée est également sur
pastebin .
Le résultat est similaire, mais sans «poubelle». 290 lignes de texte contre 894. Déjà mieux, mais pas tous.
Création rapide du journal du débogueur
L'étape suivante consiste à ajouter un journal, qui pourrait être publié ou envoyé quelque part.
Pour ce faire, passez kd.exe l'argument -loga <"P: \ Ă \ log.log">
Le code prend la forme suivante:
@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
Un journal
102516-21949-01.LOG sera généré pour le fichier
102516-21949-01.dmp dans le mĂŞme dossier que le vidage lui-mĂŞme.
Dans ce cas, la sortie de «garbage» dans le journal n'est pas filtrée, seule la sortie vers la console est filtrée, mais dans mon cas, ce n'est pas important, bien que vous puissiez le corriger en effaçant le journal après la création:
@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
Ouvrir un dépotoir dans windbg
Maintenant, dernière étape dans l'ordre, mais sans importance: vous devez pouvoir transférer le cliché directement vers windbg.exe et lui passer immédiatement des commandes que vous devrez probablement saisir. Tout se fait par analogie avec kd.exe, les arguments et commandes reçus par windbg.exe sont presque identiques à 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
En conséquence, le vidage s'ouvrira immédiatement dans le débogueur et les commandes répertoriées dans la clé
-c seront automatiquement exécutées dans celui-ci.
La conclusion est similaire à la toute première option à la différence que le vidage est ouvert immédiatement dans windbg, il est possible d'entrer des commandes pour une analyse plus approfondie en raison de l'absence de la commande
q dans la liste des commandes transmises.
(Par ailleurs, si dans les versions précédentes du script avec kd.exe vous supprimez la commande
q qui est passée dans la liste des commandes via l'argument
-c , la possibilité de continuer à travailler avec le vidage y apparaîtra, y compris l'enregistrement du journal directement dans le processus.)
Tweak Creation
Maintenant, tout cela doit être modifié afin que vous puissiez lier les fichiers * .dmp au menu contextuel. En fait, pour ce que c'était.
Voici les «one-liners» suivants:
Pour l'option avec filtrage de sortie console 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:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Pour l'option avec filtrage de la sortie de la console et création d'un fichier journal(a dû utiliser une
extension de variable différée )
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:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Pour ouvrir un vidage directement dans 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"
Dans le registre, j'ai créé la structure de partition suivante:

Un
type distinct de fichier dmp_geek a été créé dans les clés de registre dont les modifications ont été apportées. Les fichiers portant l'extension * .dmp se sont vu attribuer des fichiers de type
dmp_geek .
Dans chaque section de commande, la ligne unique + la beauté sous la forme d'icônes et de noms pratiques pour les noms d'éléments affichés dans le menu contextuel ont été ajoutés au paramètre de chaîne par défaut.

Il s'est avéré un ajustement qui ajoute la possibilité d'ouvrir massivement les vidages sélectionnés dans le dossier à la fois dans la console et dans le débogueur avec filtrage des «ordures» et création de journaux pour chaque vidage si nécessaire. Cela fait gagner beaucoup de temps.
Après avoir peigné le registre, tout exporté dans le fichier REG final prêt à l'emploi.
Le contenu du fichier REG 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\""
→ Télécharger depuis Ya.Disk
GEEK_DMP.regC’est tout. Maintenant, vous pouvez rapidement, mais superficiellement, analyser immédiatement un tas de décharges.
Matériaux utilisés, sources, liens utiles sur le sujet: