Dump | C#
- Dump | C#
Ferramentas da Microsoft que ajuda a analisar: Link para o site
O Visual Studio fornece as mesmas coisas na aba DEBUG
Dump é uma foto de tudo que está na memória no exato momento em que foi tirado. O tamanho do dump é de acordo com o uso de memória usada no exato momento em que foi tirado
Programas: WinDBG, JETBRAINS DotMemory, DebugDiag 2, JMeter
Dotnet-counters
Instalar
dotnet tool install --global dotnet-counters
Comandos
dotnet-counters ps-> exibe todos os processos .NET rodandodotnet-counters monitor -p <PID>-> monitora o processo com o PID especificado.-p = processo
Dotnet-dump
Instalar
dotnet tool install --global dotnet-dump
Comandos
dotnet-dump ps-> exibe todos os processos .NET rodandodotnet-dump collect -p <PID>-> coleta um dump do processo baseado no PIDdotnet-dump analyze <caminho do arquivo>-> vai abrir o arquivo e dentro da docs tem os comandos que podemos usar
📌 Guia Completo de Comandos do WinDbg
Comandos iniciais: !runaway -> ~<segundos_que_esta_thread>s -> !clrstack
procdump -ma -c 75 -s 5 -n 1 -w nome_do_processo.exe dumpfile.dmp
Explicação dos parâmetros:
-ma→ Gera um dump completo do processo.-c 75→ Define o limite de CPU como 75%.-s 5→ Faz a checagem a cada 5 segundos.-n 1→ Captura apenas um dump ao atingir a condição.-w nome_do_processo.exe→ Aguarda o processo iniciar, se ele ainda não estiver rodando.dumpfile.dmp→ Nome do arquivo de saída com o dump.
🛠️ Comandos Gerais
| Comando | Descrição |
|---|---|
!analyze -v | Realiza análise detalhada da falha. |
!analyze -hang | Analisa travamentos (hangs) em aplicações. |
.logopen <arquivo> | Inicia um log da sessão de depuração. |
.logclose | Fecha o log da sessão. |
.time | Exibe informações sobre o tempo de execução. |
.cls | Limpa a tela do depurador. |
.reload | Recarrega símbolos e módulos. |
🔍 Inspeção de Processos e Threads
| Comando | Descrição |
|---|---|
!process 0 0 | Lista todos os processos no sistema. |
!process <endereço> | Exibe detalhes sobre um processo específico. |
!thread | Mostra informações sobre a thread atual. |
!threads | Lista todas as threads do sistema. |
~ | Lista todas as threads do processo em análise. |
~<ID> s | Alterna para uma thread específica. |
📌 Depuração de Pilha (Stack Trace)
| Comando | Descrição |
|---|---|
k | Exibe o stack trace básico. |
kb | Stack trace com parâmetros. |
kp | Stack trace com informações adicionais de chamada. |
kv | Stack trace com verificações extras de otimização. |
🏗️ Inspeção de Módulos e Bibliotecas
| Comando | Descrição |
|---|---|
lm | Lista todos os módulos carregados. |
lmf | Lista módulos carregados com endereços de memória. |
lmv m <nome> | Exibe detalhes sobre um módulo específico. |
!dlls | Lista DLLs carregadas no processo alvo. |
🔑 Manipulação de Memória
| Comando | Descrição |
|---|---|
!address | Exibe informações sobre endereçamento de memória. |
!vad | Exibe a Virtual Address Descriptor (VAD). |
!pool | Mostra informações sobre a memória de pool. |
!pte <endereço> | Mostra informações sobre a tabela de páginas. |
dd <endereço> | Exibe dados na memória como DWORDs. |
dc <endereço> | Exibe dados na memória como caracteres ASCII. |
da <endereço> | Exibe strings armazenadas na memória. |
dps <endereço> | Exibe ponteiros na memória. |
!memusage | Exibe o uso da memória no momento da falha. |
🛠️ Depuração de Kernel
| Comando | Descrição |
|---|---|
!kd | Verifica se a depuração de kernel está ativada. |
!drvobj <driver> | Exibe informações sobre um driver específico. |
!devnode 0 1 | Lista todos os dispositivos do sistema. |
!irp <endereço> | Exibe detalhes sobre um IRP (I/O Request Packet). |
!locks | Lista todos os bloqueios de recursos. |
🔗 Depuração de Drivers
| Comando | Descrição |
|---|---|
!drvobj <nome_do_driver> | Exibe informações sobre um driver. |
!devobj <nome_do_dispositivo> | Exibe informações sobre um dispositivo. |
!irp <endereço> | Mostra detalhes sobre um IRP específico. |
!object <endereço> | Exibe detalhes sobre um objeto do sistema. |
🏴 Análise de Blue Screen (BSOD)
| Comando | Descrição |
|---|---|
!analyze -v | Fornece uma análise detalhada da falha. |
!bugcheck | Exibe detalhes do último bugcheck. |
!thread | Mostra a thread que gerou o erro. |
!drivers | Lista todos os drivers carregados. |
🔷 Depuração de Aplicações .NET (CLR)
Carregar o SOS Debugging:
.loadby sos clr
ou para versões antigas do .NET Framework:
.loadby sos mscorwks
| Comando | Descrição |
|---|---|
!clrstack | Exibe a pilha de chamadas do CLR. |
!dumpheap -stat | Lista todos os objetos na heap gerenciada. Esse comando mostra tudo que estava na Heap |
!dumpheap -mt <MethodTable> | Lista instâncias de um tipo específico. |
!gcroot <endereço> | Encontra referências raiz de um objeto. Esse comando entra em objetos específicos de dentro da heap |
!pe <endereço> | Exibe detalhes sobre um objeto. |
!do <endereço> | Exibe informações detalhadas de um objeto. |
!dumpmt <MethodTable> | Exibe informações sobre uma MethodTable. |
!dumpmodule <módulo> | Mostra assemblies e módulos carregados. |
!threads | Exibe threads gerenciadas pelo CLR. |
!eeheap -gc | Exibe o layout da heap gerenciada. |
!verifyheap | Verifica a integridade do heap gerenciado. |
!finalizequeue | Lista objetos pendentes para finalização pelo GC. |
!dso | Esse comando lista os objetos gerenciados do .NET CLR que estão na pilha da thread ativa no momento da depuração. |
!runaway | Esse comando exibe uma lista de threads com o tempo total de CPU consumido desde o início do processo. |
🛠️ Outros Comandos Úteis
| Comando | Descrição |
|---|---|
dx | Exibe dados estruturados do depurador. |
bp <endereço> | Define um breakpoint. |
bl | Lista todos os breakpoints. |
bc <número> | Remove um breakpoint. |
.chain | Lista extensões carregadas. |
💡 Dicas Extras
- Sempre use
!analyze -vpara uma visão detalhada da falha. - Utilize
lmpara verificar se os símbolos dos drivers estão carregados corretamente. - Combine
k,kb,kpekvpara uma análise completa do stack trace. - Use
dxpara visualizar objetos do kernel de forma estruturada. - Se precisar de mais comandos para .NET, carregue
SOSe explore com!help.
📌 Guia Completo do ProcDump
🔹 O que é o ProcDump?
O ProcDump é uma ferramenta da Microsoft Sysinternals usada para capturar dumps de memória de processos em execução. Ele é útil para:
✅ Diagnóstico de falhas e travamentos
✅ Identificação de uso excessivo de CPU
✅ Depuração de aplicações .NET e nativas
✅ Análise forense de processos maliciosos
📌 Instalação
1️⃣ Baixe o ProcDump no site oficial da Microsoft Sysinternals:
🔗 https://docs.microsoft.com/en-us/sysinternals/downloads/procdump
2️⃣ Extraia os arquivos para uma pasta, ex: C:\Tools\ProcDump\
3️⃣ Abra um prompt de comando (cmd) com permissões de administrador
🔹 Sintaxe Básica
procdump.exe [opções] <nome_do_processo> <arquivo_de_saida>
🛠️ Exemplo simples: Criar um dump de um processo
procdump.exe notepad.exe dump.dmp
Isso criará um dump do notepad.exe e salvará no arquivo dump.dmp.
🔥 Principais Comandos e Opções
📌 1️⃣ Captura de Dump Simples
| Comando | Descrição |
|---|---|
procdump.exe -ma <PID> | Captura um dump de memória completo do processo. |
procdump.exe -mp <PID> | Captura um dump parcial do processo. |
procdump.exe <processo> | Captura um dump do processo especificado. |
✅ Exemplo:
procdump.exe -ma 1234 dump.dmp
Isso cria um dump completo do processo PID 1234.
📌 2️⃣ Captura de Dump Baseada em Uso de CPU
| Comando | Descrição |
|---|---|
procdump.exe -c 80 <PID> | Captura um dump quando o uso da CPU ultrapassar 80%. |
procdump.exe -c 90 -n 3 <PID> | Captura 3 dumps quando a CPU ultrapassar 90%. |
✅ Exemplo:
procdump.exe -c 85 -n 2 chrome.exe dumps\chrome.dmp
➡ Captura 2 dumps do chrome.exe se o uso da CPU ultrapassar 85%.
📌 3️⃣ Captura de Dump Baseada em Uso de Memória
| Comando | Descrição |
|---|---|
procdump.exe -m 500 <PID> | Captura um dump se o processo ultrapassar 500 MB de RAM. |
procdump.exe -m 1000 -n 2 <PID> | Captura 2 dumps quando o processo ultrapassar 1GB de RAM. |
✅ Exemplo:
procdump.exe -m 800 firefox.exe firefox_dumps.dmp
➡ Captura um dump do Firefox quando ele usar mais de 800MB de memória.
📌 4️⃣ Captura de Dump ao Ocorrer Falha (Crash)
| Comando | Descrição |
|---|---|
procdump.exe -e <PID> | Captura um dump quando o processo crashar. |
procdump.exe -e 1 -t <PID> | Captura um dump completo no primeiro crash do processo. |
✅ Exemplo:
procdump.exe -e -t 5678 app_crash.dmp
➡ Captura um dump completo quando o processo 5678 falhar.
📌 5️⃣ Monitoramento Contínuo (Always-On)
| Comando | Descrição |
|---|---|
procdump.exe -ma -w <processo> | Captura um dump sempre que o processo iniciar. |
procdump.exe -e -w <processo> | Captura um dump se o processo crashar e reiniciar. |
✅ Exemplo:
procdump.exe -ma -w myapp.exe
➡ Sempre que myapp.exe for iniciado, um dump será criado.
📌 6️⃣ Captura de Dump para Aplicações .NET
| Comando | Descrição |
|---|---|
procdump.exe -ma -n 3 -g <PID> | Captura 3 dumps quando ocorrer um Garbage Collection (GC). |
procdump.exe -ma -n 2 -f "OutOfMemoryException" <PID> | Captura um dump quando ocorrer uma OutOfMemoryException. |
✅ Exemplo:
procdump.exe -ma -n 2 -f "System.NullReferenceException" dotnet_app.exe
➡ Captura 2 dumps quando uma NullReferenceException ocorrer no processo dotnet_app.exe.
📌 7️⃣ Análise Pós-Captura
Após capturar um dump, use WinDbg ou Visual Studio para analisá-lo:
Abrindo o dump no WinDbg:
windbg.exe -z dump.dmp
Abrindo o dump no Visual Studio:
1️⃣ Abra o Visual Studio
2️⃣ Vá em File → Open → File
3️⃣ Selecione o arquivo .dmp
4️⃣ Escolha Debug with Managed Only ou Debug with Native
🔍 Dicas Avançadas
💡 Sempre execute o ProcDump como administrador para capturar processos do sistema.
💡 Use -w para esperar pelo processo e capturar automaticamente um dump quando ele for iniciado.
💡 Combine -e com -c para capturar dumps apenas quando a CPU estiver alta e o processo falhar.
