:Process Dumper - 为异常关闭的进程保存转储文件
在 Windows 系统的“启动与故障恢复”中设置“写入调试信息”,以便在 Windows 遇到蓝屏故障后通过 Debugging Tools for Windows 分析蓝屏时自动保存的内存转储文件(Crash Dump File)以排查蓝屏故障原因的方法相信很多人都非常熟悉了。详细介绍可以参考《Windows 常见蓝屏故障分析》。
除 了 Windows 蓝屏故障以外,很多应用程序进程异常关闭或停止响应的软件故障也可以通过分析转储文件加以排查。Windows 没有直接提供为应用程序保存转储文件的功能,我们可以在微软官方网站下载 User Mode Process Dumper 8.1(以下简称为 UserDump):
http://www.microsoft.com/downloads/details.aspx?FamilyID=E089CA41-6A87-40C8-BF69-28AC08570B7E&displaylang=en&displaylang=en
此工具可以监视运行中的 Win32 进程并为其保存转储文件,不会附加调试器或中止进程,而且可以监控 CSRSS.EXE、SERVICES.EXE、WINLOGON.EXE 之类系统核心进程。下载后运行 SETUP.EXE,安装内核模式驱动程序 USERDUMP.SYS、添加 USERDUMP 系统服务并在控制面板中生成 Process Dump 图标。注意在安装时要选择“Enable Dump on Process Termination Feature”复选框。
如果某应用程序进程经常异常关闭,我们可以双击控制面板中的 Process Dump 图标,在 Process Monitoring 选项卡中点击“New(新建)”,然后输入需要监控的进程名称,无需输入进程完整路径。接下来点击“Rules(规则)”按钮,为监控的进程选择错误类型 规则,在此可以选择“Select All(选择所有)”,这样当进程触发了规则中的任一条错误类型规则后,UserDump 都会自动保存转储文件。我们在此还可以设置转储文件的保存位置,默认是 Windows 文件夹,建议修改为其它位置。
如果某应用程序进程在运行时停止了响应,我们可以首先通过任务管理器记下此进程的 PID,然后以命令行方式执行 UserDump.EXE <PID> 命令以生成转储文件。
应用实例:
笔者曾经在 Windows 中运行《恐龙危机 II》游戏时遇到游戏主进程 Dino2.EXE 异常关闭的问题。游戏虽然可以正常载入并在大部分场景中正常运行,但在进入 Regina 与 Dylan 交替掩护闯异特龙巢穴的特定关卡中,只要一发射信号弹就肯定会“Dino2.EXE 遇到了问题需要关闭”。经检查,游戏的所有程序文件都没有损坏,经卸载重装游戏后问题依旧。于是笔者用 UserDump 设置了监控 Dino2.EXE 进程,重新运行游戏后,UserDump 检测到活动的 Dino2.EXE 进程并自动监控其状态,当游戏异常关闭后,相应的转储文件也保存好了。经过分析转储文件得知,Dino2.EXE 在那个特定的关卡中加载 D3DIM.DLL 时遇到了问题,D3DIM.DLL 是一个 DirectX 文件,那个特定关卡中的信号弹是需要经过特定 Direct3D 渲染的,因此才会出现游戏可以正常载入、但只要一在那个特定关卡发射信号弹就异常关闭的问题。了解故障原因后,笔者尝试重新安装显示驱动程序及 DirectX 运行时组件以修复 Direct3D 设置,重新运行游戏后问题得以解决。
文/ alx-zj
Windows7之家(www.win7china.com),凝聚你我他