Muitos usuários de sistemas operacionais Windows, mais cedo ou mais tarde, são confrontados com a necessidade de descobrir por que seu sistema operacional favorito "cai no BSOD".
Muito já foi escrito sobre como procurar uma causa e como corrigi-la (dependendo da situação) na Internet, mas o que devo fazer se precisar descobrir a causa o mais rápido possível e precisar fazê-lo regularmente, como prestadores de serviços ou clientes regulares em fóruns de computador?

Os ajustes notórios do menu de contexto podem simplificar a tarefa, uma vez que são feitos de maneira bastante simples.
PreparaçãoPrimeiro, você precisa instalar o pacote com o depurador windbg.exe, a versão do console do kd.exe e outros conteúdos necessários.
Estes são os pacotes
X64 Debuggers And Tools-x64_en-us.msi ou
X86 Debuggers And Tools-x86_en-us.msi para escolher, dependendo da profundidade de bits do sistema operacional usado e / ou das preferências pessoais.
Você não encontrará links individuais no site da microsoft, mas esses pacotes fazem parte do
Windows Driver Kit , você pode baixá-lo sem instalá-lo selecionando o modo de instalador apropriado; os pacotes estarão na pasta
\ Windows Kits \ 10 \ WDK \ Installers quando o download for concluído.
Se alguém precisar, enviei-os separadamente para I. Disco:
Depuradores X64 e ferramentas-x64_en-us.msiDepuradores X86 e ferramentas-x86_en-us.msiDecidi não instalar o depurador, mas apenas descompacte o msi:
msiexec /a "D:\Desktop\X64 Debuggers And Tools-x64_en-us.msi" /qb targetdir="D:\Desktop\Temp"
Esta opção "portátil" é mais do que suficiente. Depois, para minha própria conveniência, mudei o conteúdo desejado de várias subpastas para
C: \ Portable \ Debug , para que
ocorra :
C:\Portable\Debug\windbg.exe
C:\Portable\Debug\kd.exe
+ tudo o resto. Vamos desenvolver esse caminho no futuro (mais eu o adicionei ao% PATH% novamente, por conveniência).
Nesse sentido, as medidas preparatórias podem ser consideradas concluídas e continuar a descrever o processo de criação de ajustes.
Como minha tarefa pressupõe que existem muitas e muitas vezes despejos, preciso acelerar o processo o máximo possível, tornando-o informativo o suficiente para uma análise rápida.
Lidando com chaves e comandos do depurador
Como base para o futuro ajuste, vamos usar um arquivo em lote, no qual basta arrastar o dump desejado.
Para uma melhor percepção das informações, no meu entendimento, inverti as cores do console e ajustei o tamanho da janela do console.
@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
Aqui você pode ver os parâmetros transmitidos pelo kd.exe, como
-y ,
-i e, de fato,
-z , vistos por todos que conhecem o
kdfe.cmd, amplamente conhecidos em círculos estreitos.
-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
Se considerarmos por analogia as instruções comuns, há pequenas diferenças:
-nosqm e
-sup são passados adicionalmente como argumentos.
-nosqm disables SQM data collection/upload. -sup enables full public symbol searches
Como equipes:
!cpuid !sysinfo cpuinfo !sysinfo cpuspeed !sysinfo machineid
Não vou pintá-los, porque muitas cópias e colas serão exibidas. Os interessados poderão encontrar a ajuda detalhada do
debugger.chm em um dos dois * .msi mencionados acima ou em docs.microsoft.com
-cpuid -sysinfo . Em resumo, informações básicas sobre a glândula da vítima.
A saída do script usando o kd.exe será quase a mesma que seria obtida ao trabalhar diretamente através do windbg, mas o resultado é alcançado muito mais rapidamente, pois você não precisa abrir nada, configurar pastas, abrir o dump no menu e inserir comandos no depurador.
Filtrando a Saída de Lixo do Console
Para o primeiro exemplo, vamos fazer um despejo de memória de um usuário aleatório. Há um pequeno problema com o lixo na saída:
Captura de tela de uma parte da saída do console Isso é encontrado, por exemplo, em despejos de usuários usando o ativador odin, que vemos neste exemplo.
A saída completa é bastante massiva, por causa do link para
pastebin .
É necessário "filtrar" linhas desnecessárias, deixando apenas informações úteis.
Eu usei o
findstr , resultou em uma solução tão feia, mas funcional:
findstr /r /v /c:"^\*\*\* .* \*\*\*" /c:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Aqui, o findstr usa dois regulares: um procura por linhas começando com três asteriscos, um espaço e terminando com um espaço e três asteriscos. O segundo procura por linhas começando com 14 estrelas. Eu não poderia fazer nada mais inteligível com o findstr.
(Eu não recomendo o uso de caracteres de terminação de linha nas rotinas findst no escape kd.exe, pode haver problemas com o tipo de final de linha exibido pelo kd.exe. Em vez de
\ r \ n, você pode obter
\ n que o findstr não considera o fim da linha.
O código inteiro do arquivo de lote preliminar com o "filtro" acabou sendo:
@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
A saída completa da versão filtrada também está no
pastebin .
O resultado é semelhante, mas sem "lixo". 290 linhas de texto versus 894. Já é melhor, mas não todos.
Criação rápida de log do depurador
O próximo passo é adicionar um log, que pode ser postado ou enviado em algum lugar.
Para isso, passe ao kd.exe o argumento -loga <"P: \ to the \ log.log">
O código tem o seguinte formato:
@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
Um log
102516-21949-01.LOG será gerado para o arquivo
102516-21949-01.dmp na mesma pasta que o próprio dump.
Nesse caso, a saída de "lixo" para o log não é filtrada, apenas a saída para o console é filtrada, mas no meu caso isso não é importante, embora você possa corrigi-lo limpando o log após a criação:
@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
Abrindo um despejo no windbg
Agora, o último passo em ordem, mas não em importância: você precisa transferir o dump diretamente para windbg.exe e passar imediatamente comandos para ele que você provavelmente precisará inserir. Tudo é feito por analogia com o kd.exe, os argumentos e comandos recebidos pelo windbg.exe são quase idênticos ao 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
Como resultado, o dump será aberto imediatamente no depurador e os comandos listados na chave
-c serão executados automaticamente nele.
A conclusão é semelhante à primeira opção, com a diferença de que o dump é aberto imediatamente no windbg; é possível inserir comandos para análises posteriores devido à ausência do comando
q na lista de comandos transmitidos.
(A propósito, se nas versões anteriores do script com kd.exe você remover o comando
q que é passado na lista de comandos pelo argumento
-c , a capacidade de continuar trabalhando com o dump aparecerá lá, incluindo a gravação do log diretamente no processo.)
Tweak Creation
Agora tudo isso precisa ser modificado para que você possa vincular arquivos * .dmp ao menu de contexto. Na verdade, pelo que estava fazendo.
Aqui estão os seguintes "one-liners":
Para a opção com filtragem de saída do 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:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Para a opção de filtrar a saída do console e criar um arquivo de log(teve que usar uma
extensão variável adiada )
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:"^\*\*\*\*\*\*\*\*\*\*\*\*\*\*.*"
Para abrir um despejo diretamente no 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"
No registro, criei a seguinte estrutura de partição:

Um
tipo separado de arquivo dmp_geek foi criado nas chaves do registro cujas alterações foram feitas. Arquivos com a extensão * .dmp receberam arquivos do tipo
dmp_geek .
Em cada seção de comando, a linha única + beleza correspondente na forma de ícones e nomes convenientes para os nomes de itens exibidos no menu de contexto foram adicionados ao parâmetro de string por padrão.

O resultado foi um ajuste que adiciona a capacidade de abrir massivamente os dumps selecionados na pasta no console e no depurador, com filtragem de “lixo” e criação de logs para cada dump, conforme necessário. Isso economiza muito tempo.
Depois de vasculhar o registro, exportou tudo para o arquivo REG final, pronto para uso.
O conteúdo do arquivo 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\""
→ Faça o download do Ya.Disk
GEEK_DMP.regIsso é tudo. Agora você pode rapidamente, embora superficialmente, analisar imediatamente um monte de lixões.
Materiais usados, fontes, links úteis sobre o tópico: