Dump文件分析
一、工具概览与适用场景
工具 | 适用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):
.sympath SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols;D:\YourApp\pdb
-
自动化分析:
!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命令:
jmap -dump:format=b,file=heap.hprof <PID>
-
-
jvisualvm (JDK自带)
-
适用于快速分析:
jvisualvm → 文件 → 装入 → 选择Dump文件
-
功能:线程状态、对象实例统计。
-
3. 内核/Minidump分析
-
Dumpscan
-
安装:
pipx install dumpscan pipx inject dumpscan volatility3
-
提取敏感数据:
# 扫描Minidump中的环境变量 dumpscan minidump envars crash.dmp # 提取内核Dump中的x509证书 dumpscan kernel x509 /path/to/kernel.dmp -o certs_dir
-
4. Android系统Dump
-
dumpsys
-
获取系统服务状态:
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(内存、电池等)