Quick answer: A minidump (.dmp) file is a compact snapshot of a process at the time of a crash. It typically contains the stack trace for every thread, CPU register values, the list of loaded modules with their base addresses, the exception record describing what went wrong, and optionally a subset of memory arou...
Learning how to read minidump files from game crashes is a common challenge for game developers. Minidump files are the gold standard for post-mortem crash analysis on Windows. Every major game engine generates them, and every crash reporting system collects them. But many indie developers have never opened one. This guide walks through the process of loading a minidump in WinDbg and Visual Studio, configuring symbols, and extracting the information you need to fix the crash.
What a Minidump Contains
A minidump is a binary file with the .dmp extension that captures a snapshot of a crashed process. Despite the name, it contains a significant amount of data. A standard minidump includes the stack trace for every thread in the process, the CPU register values at the moment of the crash, the exception record describing the error, the list of all loaded DLLs and their base addresses, and system information like the OS version and processor type.
Full minidumps can also include the entire process memory, making them much larger but enabling inspection of heap contents and global state. For crash reporting, the standard (small) minidump is usually sufficient and keeps file sizes under 5 MB.
Opening a Minidump in Visual Studio
The quickest way to analyze a minidump is to double-click the .dmp file, which opens it in Visual Studio. You see a summary page with the exception code, the crashing module, and a "Debug with Native Only" button. Before clicking that button, configure your symbol paths.
Go to Debug > Options > Symbols and add your symbol server or local PDB directory. Also add the Microsoft public symbol server to resolve Windows system DLL symbols:
# Symbol path entries in Visual Studio
srv*C:\SymCache*https://msdl.microsoft.com/download/symbols
C:\MyGame\Builds\v1.2.3\symbols\
Click "Debug with Native Only" and Visual Studio loads the dump, resolves symbols, and shows you the call stack of the crashing thread. If the source code is available on your machine, you can click a stack frame to jump directly to the source file and line.
Using WinDbg for Deeper Analysis
WinDbg (now available as WinDbg Preview from the Microsoft Store) is the power tool for minidump analysis. It offers automated crash analysis and scripting capabilities that Visual Studio lacks.
Open WinDbg and load the dump via File > Open Crash Dump. Set the symbol path and run the analysis:
# Configure symbols
.sympath srv*C:\SymCache*https://msdl.microsoft.com/download/symbols
.sympath+ C:\MyGame\Builds\v1.2.3\symbols\
.reload
# Run automated crash analysis
!analyze -v
The !analyze -v command is the single most useful command in WinDbg. It automatically identifies the crashing thread, decodes the exception, walks the stack, and prints a probable cause. The output includes the faulting instruction, the exception code, the call stack with symbols, and a "FOLLOWUP_IP" that points to the most likely culprit frame.
Essential WinDbg Commands
After the initial analysis, these commands help you dig deeper:
# Show the call stack of the current thread
k
# Show call stacks for all threads
~*k
# Display local variables for the current frame
dv
# Examine memory at a specific address
dd 0x00401000 L10
# Show loaded modules and their addresses
lm
# Switch to a different thread
~2s # Switch to thread 2
The ~*k command is particularly useful for multi-threaded game crashes. It shows every thread's stack, letting you identify deadlocks, race conditions, or which game system was active on each thread when the crash occurred.
Extracting Crash Information Without Symbols
Sometimes you receive a minidump but lack the matching PDB files. You can still extract useful information. The lm command lists all loaded modules with their version numbers. The exception record shows the type of crash (access violation, stack overflow, etc.) and the faulting address. You can identify which module contains the faulting address by comparing it to the module load addresses.
# Even without symbols, you can identify the crashing module
lm
00400000 00800000 MyGame (no symbols)
76800000 76900000 kernel32 (pdb symbols)
# If the crash address is 0x00501234, it's in MyGame
# offset = 0x00501234 - 0x00400000 = 0x101234
With the module offset, you can later symbolicate the address once you locate the correct PDB file. This is why archiving PDB files for every build is so important.
Common Exception Codes in Game Crashes
0xC0000005 (Access Violation) is the most common. It means the code tried to read or write memory it does not have access to. This covers null pointer dereferences, use-after-free, buffer overflows, and dangling pointer access. The second parameter in the exception record tells you whether it was a read or write, and the target address.
0xC00000FD (Stack Overflow) means the thread exhausted its stack space, usually from infinite recursion. The call stack will show the repeating frame pattern.
0xC0000409 (Stack Buffer Overrun) indicates the stack cookie security check detected a buffer overrun. This is typically a buffer overflow on a stack-allocated array.
"A minidump without symbols is a locked box. You can shake it and guess what is inside, but the PDB is the key."
Automating Minidump Analysis
Manually opening minidumps in WinDbg does not scale when you have hundreds of crash reports per day. Bugnet automates this entire workflow. When your game's crash reporter uploads a minidump, Bugnet's backend loads it against your archived symbols, runs the equivalent of !analyze -v, and extracts the symbolicated call stack, exception details, and thread states. The result appears in your dashboard as a fully readable crash report, grouped with other crashes that share the same signature.
Related Issues
For the complete guide to collecting and symbolicating crash dumps, see capturing and symbolicating crash dumps from player devices. For a broader introduction to stack traces, read reading game stack traces: a beginner's guide. For Unreal Engine-specific crash logs, see our Unreal Engine crash log analysis guide.
Install WinDbg Preview from the Microsoft Store. It is free, it is modern, and it is the best tool for Windows crash analysis.