一、工具概览与适用场景
工具适用Dump类型核心功能平台推荐度
WinDbg
Windows进程Dump
崩溃分析、线程堆栈追踪、内存泄漏检测
Windows
★★★★★
MAT (Eclipse Memory Analyzer)
Java堆Dump (.hprof)
内存泄漏检测、对象分布统计、OOM根因分析
跨平台
★★★★★
Visual Studio
Windows进程Dump
可视化调试、源码级问题定位
Windows
★★★★☆
Dumpscan
内核/Minidump
提取敏感数据(证书、环境变量)
跨平台 (CLI)
★★★☆☆
jhat/jvisualvm
Java堆Dump
快速堆分析、对象查询
跨平台
★★★☆☆
二、详细使用指南
1. Windows进程Dump分析
WinDbg
步骤:
打开WinDbg → File → Open Crash Dump 加载Dump文件。
设置符号路径(系统+应用PDB):
bash
.sympath SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols;D:\YourApp\pdb
自动化分析:
bash
!analyze -v # 自动诊断崩溃原因
kvn # 查看异常调用栈
.dump /ma # 如需保存完整分析结果
适用场景:蓝屏分析、程序崩溃、死锁。
Visual Studio
直接拖入Dump文件 → 自动加载符号 → 点击“调试”查看堆栈和变量值。
优势:直观定位崩溃代码行(需匹配源码版本)。
2. Java堆Dump分析
MAT (Eclipse Memory Analyzer)
步骤:
修改MemoryAnalyzer.ini中的-Xmx值(大于Dump文件大小)。
打开MAT → File → Open Heap Dump → 选择.hprof文件。
查看报告:
Leak Suspects:自动识别内存泄漏点。
Dominator Tree:定位占用内存最大的对象。
OQL:自定义查询对象(如`SELECT * FROM java.lang.String)。
生成Dump命令:
bash
jmap -dump:format=b,file=heap.hprof
jvisualvm (JDK自带)
适用于快速分析:
bash
jvisualvm → 文件 → 装入 → 选择Dump文件
功能:线程状态、对象实例统计。
3. 内核/Minidump分析
Dumpscan
安装:
bash
pipx install dumpscan
pipx inject dumpscan volatility3
提取敏感数据:
bash
# 扫描Minidump中的环境变量
dumpscan minidump envars crash.dmp
# 提取内核Dump中的x509证书
dumpscan kernel x509 /path/to/kernel.dmp -o certs_dir
4. Android系统Dump
dumpsys
获取系统服务状态:
bash
adb shell dumpsys meminfo <包名> # 应用内存详情
adb shell dumpsys battery # 电池状态
三、分析技巧与注意事项
符号文件(PDB)
WinDbg/VS需加载应用编译时生成的PDB文件,否则堆栈信息无法解析。
符号路径格式:SRV*本地缓存目录*符号服务器URL。
Java堆分析优化
大Dump文件(>4GB)建议在服务器端用MAT生成报告(ParseHeapDump.sh),下载ZIP结果本地查看。
常见错误解决
MAT启动失败:
Linux/Mac需调整ParseHeapDump.sh,替换GTK调用为Java命令。
WinDbg提示"Missing symbols":
执行 .symopt +0x40 启用模糊匹配(时间戳不匹配时)。
四、工具选择建议
Windows程序崩溃 → WinDbg(深度分析) / Visual Studio(源码调试)
Java内存泄漏 → MAT(自动化报告) / jvisualvm(轻量检查)
内核敏感数据提取 → Dumpscan(证书、环境变量)
Android系统状态 → dumpsys(内存、电池等)