前言
本来只想发布一篇使用 livekd
抓取系统转储文件的总结,没想到一下子扩展出了这么多篇。转储系列文章终于告一段落了。今天对转储系列文章做个总结。
回顾
在转储系列文章的开篇 —— 《转储文件知多少》 里主要介绍了什么是转储文件(转储文件是进程某一时刻的快照),什么时候需要转储文件,及简要介绍了需要抓取转储文件的四大情形(按照我自己的理解分的)。这里摘录一下之前文章的内容,后续文章都是按照这个思路展开的。
- 在任意时刻抓取
dump
,不必等待进程出现异常后再抓取。
有时候我们想知道进程在某一时刻的状态(比如,程序不响应了),我们可以抓个dump
分析下原因。- 系统中的进程异常退出时,自动生成转储文件。
有时候,进程莫名其妙退出了,我们想分析下原因。这时候可以做些设置,让进程异常退出的时候能留下一份转储文件(或者中断到调试器)。这样就可以进一步分析原因了。- 自己的进程异常后,自动保存转储文件供我们事后分析。
我们自己的进程出现异常的时候,如果能自动保存一份转储文件,并保存一些关键信息(例如,日志,异常退出时的截屏等)供我们事后分析该多好啊。当然可以。很多软件都有类似的机制,比如微信
,firefox
等。我们当然也想为我们自己的程序增加类似的功能,对吧?- 抓取系统级别的转储文件。
有时候,我们需要抓取一个系统级的转储文件。比如,想知道某个跨进程的COM
调用卡在哪里了。了解如何抓取系统级的转储文件也很有必要,说不定在关键时刻能帮上我们的大忙。
其中,前三类都是针对单个应用程序的,主要包含以下几篇文章:
- 《你需要知道的 N 种抓取 dump 的工具》 :主要介绍了几种可以抓取应用程序转储文件的工具,尤其是
procdump
抓取转储文件的各种方法。 - 《你生成的转储文件有问题吗?》:介绍了某些情况下生成的转储文件会“有问题”。生成的转储文件中如果包含
Wow64
子系统的信息时,我们需要使用wow64exts!sw
命令或者.effmach
命令切换模式。 - 《你需要了解的JIT Debugging》 :介绍了
JIT Debugging
及相关的关键注册表项 ——HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
和HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
。 - 《JIT Debug Info 简介》 :介绍了
JIT Debug Info
的重要性,我们可以在windbg
通过.jdinfo
命令使用保存的JIT Debug Info
。 - 《向大厂看齐!为自己的程序增加自动转储的功能!》 :简单介绍了如何像大厂那样为自己的程序增加自动转储的功能。首先,简单介绍了保存转储文件的关键函数——
MiniDumpWriteDump()
的参数。然后介绍了几个很棒的开源框架,可以帮助我们快速为自己的程序添加自动转储的功能。
第四类是关于系统转储文件的抓取方法的,主要包含以下几篇文章:
《内核转储,开抓啦!》:是内核转储文件系列文章的开篇。总结了几种内核转储文件的抓取方法,并简要介绍了一个可以让系统在蓝屏时自动保存转储文件的设置。后续的文章针对每种抓取方法做了一个相对详细的介绍。
《蓝屏(BSOD)转储设置,看本文就够了!》:比较详细的介绍了蓝屏转储设置的各个选项的作用及在注册表中的存储位置。同时参照微软官方文档总结了各种类型的转储文件。
《系统蓝屏的几种姿势,确定不了解下么?》:介绍了几种可以使系统蓝屏的方法。
- 通过结束系统关键进程来使系统蓝屏的方法比较暴力,而且
win10
对系统关键进程有保护,不能轻易杀死。但是我们可以使用RtlSetProcessIsCritical
把指定的进程设置为系统关键进程,然后杀掉。我觉得这个思路真是太巧妙了。 - 通过快捷键
RCtrl + Scroll Lock + Scroll Lock
来使系统蓝屏的方法不需要借助任何工具,但是需要提前做好设置。 - 如果键盘上没有
Scroll Lock
键,还可以自定义蓝屏快捷键,具体定义方法请查看文章里的介绍。 - 通过
NotMyFault
工具使系统蓝屏比较简单。而且我自己的机器上总会安装sysinternal
工具集,所以对我来说,使用NotMyFault
非常方便。
- 通过结束系统关键进程来使系统蓝屏的方法比较暴力,而且
《本地内核调试环境搭建,就这么简单!》:简单介绍了在
Vista
及后续操作系统中开启本地内核调试的方法。开启本地内核调试后,以管理员权限运行windbg -kl
即可连接到内核进行调试,但是本地内核调试有很多限制。如果开启了内核调试,按PrtSc
(如果与SysRq
是同一个键的话)会使系统挂起,需要在另外一台机器上使用内核调试器连接到当前机器,让挂起的系统重新运行起来。《双机内核调试 101》 :简单的介绍了各种连接方式在被调试系统中的设置方法。
《使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境》 :较为详细的介绍了使用
VMWare
在win10
下进行双机内核调试的环境搭建方法。以虚拟串口
和VirtualKD
两种方式进行了演示。《使用 VMware + win10 + vs2019 从零搭建双机内核调试环境》:以视频的形式演示了如何使用
vs2019
进行双机内核调试。《本地内核调试神器 —— livekd 使用总结》:总结了我在使用
livekd
时,遇到的一些问题及解决办法。
总结
希望这几篇文章可以帮助大家顺利抓到想要的转储文件,更快速有效的解决困扰我们的 bug
。
最后,祝每一位小伙伴—— Money++, bug--
。