实时内核转储:蓝屏前给系统拍张"体检照"——SystemInformer 内核转储指南
【免费下载链接】systeminformerA free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Solutions, Inc. @ https://windows-internals.com项目地址: https://gitcode.com/GitHub_Trending/sy/systeminformer
SystemInformer 是一款免费的 Windows 系统调试工具。本文讲 SystemInformer 的内核转储功能:系统还没崩溃时,就能实时抓一份内核转储(Live Kernel Dump),把内核内存现状快照到磁盘。适合系统不稳定的普通用户,也适合写驱动的开发人员。
能力总览:它不止能看进程
SystemInformer 是 Windows 系统调试的"瑞士军刀":进程、驱动、网络、注册表都能看。围绕"崩溃分析",它有三个核心能力:
- 实时内核转储。系统还在运行时,就把内核内存的完整状态抓下来存盘。不用等蓝屏发生,不用重启。
- 进程级小转储(minidump)。对任意进程右键,单独给它做快照。配合内核快照选项,方便追查某个具体程序的崩溃。
- 图形化、免命令行。全程点鼠标操作。程序本身免费、开源(MIT 协议),源码就在你眼前。
底层它带一个内核驱动,源码在 KSystemInformer/ 目录,用来读取更深层的系统信息。
动手实践
编译安装:先让程序跑起来
要做的:在你电脑上装好一个能用的 SystemInformer。
- 确认环境。Windows 10 或更高版本即可,32 位 64 位都行;想自己编译需要 Visual Studio 2022。
- 拿到程序。自己编译的话,克隆仓库:
git clone https://gitcode.com/GitHub_Trending/sy/systeminformer也可以从项目官网下载现成的绿色版,不需要安装。
- 编译。打开项目根目录的
SystemInformer.sln解决方案;项目也提供了 CMake 支持,见根目录 CMakeLists.txt 和 cmake/ 目录。
你会看到:主窗口列出所有进程,顶部有 CPU、内存等资源曲线。
创建实时内核转储最快步骤
要做的:系统已经出现不稳定迹象(程序频繁崩溃、卡顿),趁还没蓝屏,把"现场"保存下来。
- 右键主窗口里的进程,在 "Dump" 菜单里选 "Custom";或用工具栏的 Live kernel dump 入口,弹出配置对话框。
- 按需勾选:"Compress memory pages" 压缩内存页,减小体积;只关心内核问题时勾 "Only kernel thread stacks",只存内核线程栈。
- 点确定,选保存位置。默认文件名形如
kerneldump_2026-09-10_09-30-00.dmp。
这些勾选项对应的参数,在 SystemInformer/kdump.c 里逐项设置:
options.CompressMemoryPages = Button_GetCheck(GetDlgItem(hwndDlg, IDC_COMPRESS)) == BST_CHECKED; options.OnlyKernelThreadStacks = Button_GetCheck(GetDlgItem(hwndDlg, IDC_ONLYKERNELTHREADSTACKS)) == BST_CHECKED;底层实现很直接:同一个文件里调用 Windows 系统调试接口完成抓取。
你会看到:一个进度窗口,实时显示转储文件正在长到多大。完成后,硬盘上多出一个.dmp文件,这就是这一刻系统的"体检照"。
转储文件分析速查:把 .dmp 交给调试器
要做的:转储文件在手,想知道当时内核里有什么。
- 安装 Windows Debugger(WinDbg,随 Windows SDK 提供),用它打开
.dmp。 - 查看加载模块列表和内核内存布局。实时转储是活体快照,重点看哪些驱动、哪些内存区域"不对劲"。
- 如果你还拿到了蓝屏后自动生成的小转储(默认在
C:\Windows\Minidump),用 WinDbg 打开并运行!analyze,它会给异常代码、崩溃堆栈和疑似模块的初步判断。
你会看到:加载驱动列表、崩溃时的堆栈和异常代码。堆栈指向哪个驱动,就先更新或回滚哪个驱动。
避坑指南:权限和体积,三句话解决
提示"Unable to create live kernel dump"。原因:没用管理员身份运行。代码里直接检查当前用户令牌,权限不够就拒绝,见 SystemInformer/kdump.c 中的提权检查。解决:右键程序选"以管理员身份运行"。
转储文件太大,吃光磁盘空间。原因:默认抓的是全量内核内存。解决:勾选"仅内核线程栈",只存内核线程栈;再勾上"压缩内存页",体积会明显下降。
转储进程时,内核部分提示无法生成。原因:内核快照需要管理员权限;32 位进程还要借助对应的 32 位程序辅助,相关逻辑在 SystemInformer/mdump.c。解决:以管理员身份重新运行,再试一次。
收尾:下次崩溃之前,先拍张照
内核转储的价值在一个"活"字:不用等蓝屏才动手,系统一有风吹草动就能留证据。建议你现在就做一件事——以管理员身份打开 SystemInformer,勾上"仅内核线程栈"创建一份转储,把完整流程走一遍。真出问题时,你只需要重复这几个动作。
【免费下载链接】systeminformerA free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you by Winsider Seminars & Solutions, Inc. @ https://windows-internals.com项目地址: https://gitcode.com/GitHub_Trending/sy/systeminformer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考