命令是干什么的
进程卡死或崩溃时,现场一旦消失就很难复现;转储把进程的内存与线程状态落盘,供事后用调试器分析。Windows 上最省事的是任务管理器右键创建转储,需要触发式或批量抓取时用 Sysinternals 的 ProcDump,系统内置的 comsvcs.dll 也能在无外部工具时完成抓取。
抓完怎么看
转储本身不给结论,分析要用 WinDbg 或 WinDbg Preview:加载后执行 !analyze -v 得到异常码、故障模块与调用栈,再看托管侧栈需借助 CLR 扩展命令。位数必须匹配:64 位进程用 64 位调试器,32 位用 32 位,否则根本打不开。
基本信息
| 适用平台 | Windows 7/10/11 与各版 Server;任务管理器与 comsvcs 为系统内置 |
|---|---|
| 权限要求 | 抓取其他用户的进程需管理员权限,系统进程可能需要更高权限 |
| 常用工具 | 任务管理器、Sysinternals ProcDump、comsvcs.dll 导出 |
| 分析工具 | WinDbg 或 WinDbg Preview,核心命令 !analyze -v |
典型使用场景
- 应用崩溃但日志里只有一句“已停止工作”,需要根因
- 进程假死无响应,希望在不重启的条件下保留现场
- 内存持续增长怀疑泄漏,抓两个时间点的转储做对比
- 间歇性崩溃无法复现,需要触发器式抓取提前预埋
- 向厂商提交问题单时提供完整现场,缩短定位时间
常用示例
常用示例
:: 方式一:任务管理器(最省事)
:: Ctrl+Shift+Esc -> 详细信息 -> 右键进程 -> 创建转储文件
:: 方式二:Sysinternals ProcDump(支持触发式抓取)
procdump -ma -t 1234 C:\dumps\pid_1234.dmp
:: 方式三:系统内置 comsvcs(管理员运行,位数与目标进程一致)
rundll32.exe C:\Windows\System32\comsvcs.dll,MiniDump 1234 C:\dumps\pid1234.dmp full
:: 分析:用 WinDbg 打开 dmp 后执行 !analyze -v抓取方式对照
| 方式 | 适用场景 | 注意 |
|---|---|---|
| 任务管理器 | 手工即时抓取 | 图形界面操作,最省事 |
| ProcDump | 触发式或批量抓取 | -t 在进程挂起时抓取,适合间歇性问题 |
| comsvcs MiniDump | 无外部工具时 | 位数要与目标进程一致 |
| full 参数 | 包含完整内存 | 文件可能非常大 |
| mini 模式 | 只含必要信息 | 体积小,但分析深度有限 |
| WinDbg 分析 | 事后定位根因 | 位数不匹配会打不开 |
抓取转储会让目标进程短暂暂停,内存大的进程更明显:生产高峰谨慎操作,并先确认目标磁盘有足够空间。
全内存转储的大小可能接近进程占用的内存,抓之前先看磁盘剩余空间;排查内存泄漏时,保留两个时间点的转储更有价值。