Find the crash dump, set up symbols and read !analyze -v
Find a Windows crash dump, load it in WinDbg with Microsoft symbols, and read !analyze -v: bugcheck code, faulting module, stack. Kernel BSOD dumps and application dumps.
Short answer: install WinDbg (winget install Microsoft.WinDbg), open the .dmp file, run .symfix and .reload so it loads Microsoft's public symbols, then run !analyze -v. Read the bugcheck code (or exception code), MODULE_NAME / IMAGE_NAME, and the STACK_TEXT. The module named there is the first suspect, not always the culprit.
1. Find the dump
| Kind of crash | Default location |
|---|---|
| Blue screen, small memory dump (minidump) | %SystemRoot%\Minidump\*.dmp |
| Blue screen, kernel / automatic / complete memory dump | %SystemRoot%\MEMORY.DMP |
| Live kernel report (driver timeout, Windows kept running) | %SystemRoot%\LiveKernelReports\ |
| Application crash, only if Windows Error Reporting LocalDumps is enabled | %LOCALAPPDATA%\CrashDumps unless DumpFolder is set |
Which kernel dump Windows writes is set under System Properties → Advanced → Startup and Recovery. Application dumps are off by default; the registry key is HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps (DumpType 1 = minidump, 2 = full). Our open-source Set-WerLocalDumps.ps1 sets it up for you.
Copy the file somewhere else before you open it. A minidump is small (hundreds of KB). A full kernel dump can be as big as the machine's RAM.
2. Install WinDbg and load symbols
Without symbols, every stack frame is an offset into a module and !analyze guesses. Point the debugger at Microsoft's public symbol server, and add a local cache:
.sympath srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
.reload
.symfix C:\Symbols does the same in one command. For your own application or driver, add the folder holding its PDB files to the path, built from the same source as the crashing binary.
3. Run !analyze -v and read it
0: kd> !analyze -v
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
Arguments:
Arg1: fffff808add27150, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000000, value 0 = read operation, 1 = write operation
Arg4: fffff808adc386a6, address which referenced memory
...
MODULE_NAME: exampledrv
IMAGE_NAME: exampledrv.sys
STACK_TEXT: ...
- The bugcheck name and code (here
0xD1) tell you the class of failure. Each one has its own parameter meanings; see the stop code guides below. - Arg1 to Arg4 are the four bugcheck parameters. They often hold the address to look at next.
MODULE_NAME/IMAGE_NAMEis the module!analyzeblames. If it'sntoskrnl.exeorWdf01000.sys, the real fault is usually a third-party driver further down the stack.STACK_TEXTis the call stack at the crash. Read it from the top down and look for the first module that isn't Windows.
For an application crash, the exception code replaces the bugcheck: c0000005 is an access violation, c0000409 a stack buffer overrun (fail-fast), c0000374 heap corruption.
4. Commands for the next step
| Command | What it shows |
|---|---|
kb / kv | The stack with arguments (kv adds trap frames). |
.ecxr | User-mode dumps: switch to the exception context, then k again. |
lmvm <module> | The module's version, timestamp and path. That's how you find out the driver is three years old. |
!thread | The current thread, its IRPs and wait state. |
dx KiBugCheckDriver | The driver Windows named on the blue screen, when it identified one. |
!irql, !pool <addr>, !pte <addr> | IRQL at the crash, and what a bad address points into. |
Microsoft's reference: Analyzing a kernel-mode dump file with WinDbg and !analyze.
Common mistakes
- Blaming the module in
IMAGE_NAMEon sight. With pool corruption, the module that crashes is often the victim, not the one that wrote the bad memory. Driver Verifier (verifier) with special pool catches the writer at the moment it writes. - Wrong or missing symbols. A warning like
*** WARNING: Unable to verify checksumorSymbols can not be loadedmeans the stack below that frame may be wrong. - Reading one dump. Different stop codes on the same machine across several dumps point to hardware (memory, overheating, power) more than to one driver.
Rather not read the dump yourself?
Upload it to DumpTriage. It runs the debugger, reads the output and sends back the faulting module, the stack and a plain-language root cause. Cases the automated passes can't settle go to an engineer. Free during the pilot.
Create an account