转储系列文章总结

本文全面解析转储文件的应用场景,包括何时何地为何需要转储文件,详细介绍了四种常见需求下转储文件的获取方法。涵盖从单一应用到系统级别的转储文件抓取技巧,以及如何利用多种工具如procdump、windbg等进行有效分析,帮助开发者快速定位并解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本来只想发布一篇使用 livekd 抓取系统转储文件的总结,没想到一下子扩展出了这么多篇。转储系列文章终于告一段落了。今天对转储系列文章做个总结。

回顾

在转储系列文章的开篇 —— 《转储文件知多少》 里主要介绍了什么是转储文件(转储文件是进程某一时刻的快照),什么时候需要转储文件,及简要介绍了需要抓取转储文件的四大情形(按照我自己的理解划分的)。这里摘录一下之前文章中的介绍,后续文章都是按照这个思路展开的。

  1. 任意时刻抓取 dump,不必等待进程出现异常后再抓取。有时候我们想知道进程在某一时刻的状态(比如,程序不响应了),我们可以抓个 dump 分析下原因。

  2. 系统中的进程异常退出时,自动生成转储文件。有时候,进程莫名其妙退出了,我们想分析下原因。这时候可以做些设置,让进程异常退出的时候能留下一份转储文件(或者中断到调试器)。这样就可以进一步分析原因了。

  3. 自己的进程异常后,自动保存转储文件供我们事后分析。我们自己的进程出现异常的时候,如果能自动保存一份转储文件,并保存一些关键信息(例如,日志,异常退出时的截屏等)供我们事后分析该多好啊。当然可以。很多软件都有类似的机制,比如 QQ微信firefox 等。我们当然也想为我们自己的程序增加类似的功能,对吧?

  4. 抓取系统级别的转储文件。有时候,我们需要抓取一个系统级的转储文件。比如,想知道某个跨进程的 COM 调用卡在哪里了。了解如何抓取系统级的转储文件也很有必要,说不定在关键时刻能帮上我们的大忙。

其中,前三类都是针对单个应用程序的,主要包含以下几篇文章:

  • 《你需要知道的 N 种抓取 dump 的工具》 :主要介绍了几种可以抓取应用程序转储文件的工具,尤其是 procdump 抓取转储文件的各种方法。

  • 《你生成的转储文件有问题吗?》:介绍了某些情况下生成的转储文件会“有问题”。生成的转储文件中如果包含 Wow64 子系统的信息时,我们需要使用 wow64exts!sw 命令或者 .effmach命令切换模式。

  • 《你需要了解的JIT Debugging》 :介绍了 JIT Debugging 及相关的关键注册表项 —— HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebugHKLM\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 从零搭建双机内核调试环境》 :较为详细的介绍了使用 VMWarewin10 下进行双机内核调试的环境搭建方法。以 虚拟串口VirtualKD 两种方式进行了演示。

  • 《使用 VMware + win10 + vs2019 从零搭建双机内核调试环境》:以视频的形式演示了如何使用 vs2019 进行双机内核调试。

  • 《本地内核调试神器 —— livekd 使用总结》:总结了我在使用 livekd 时,遇到的一些问题及解决办法。

总结

希望这几篇文章可以帮助大家顺利抓到想要的转储文件,更快速有效的解决困扰我们的 bug

最后,祝每一位小伙伴—— Money++, bug--

猜你喜欢:

VS 系列:

排错实战——解决c++编译错误:error C2059: illegal token on right side of '::'

善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误

转储文件系列:

转储文件知多少

你需要知道的 N 种抓取 dump 的工具

你生成的转储文件有问题吗?

向大厂看齐!为自己的程序增加自动转储的功能!

内核转储,开抓啦!

蓝屏(BSOD)转储设置,看本文就够了!

系统蓝屏的几种姿势,确定不了解下么?

本地内核调试环境搭建,就这么简单!

双机内核调试 101

使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境

使用 VMware + win10 + vs2019 从零搭建双机内核调试环境

本地内核调试神器 —— livekd 使用总结

调试系列:

调试实战——你知道怎么使用DebugView查看调试信息吗?

调试实战——程序CPU占用率飙升,你知道如何快速定位吗?

调试实战——崩溃在ComFriendlyWaitMtaThreadProc

调试实战——使用windbg调试崩溃在ole32!CStdMarshal::DisconnectSrvIPIDs

调试实战——调试PInvoke导致的内存破坏

调试实战——调试excel启动时死锁

调试实战——调试DLL卸载时的死锁

调试实战——调试TerminateThread导致的死锁

排错系列:

排错实战——1分钟解救 run 不出来的 Autoruns

排错实战——VS清空最近打开的工程记录

排错实战——拯救加载调试符号失败的IDA

排错实战——你知道拖动窗口时只显示虚框怎么设置吗?

排错实战——解决Tekla通过.tsep安装插件失败的问题

排错实战——使用process explorer替换任务管理器

排错实战——通过对比分析sysinternals事件修复程序功能异常

欢迎留言交流!

后台回复【抽奖】参与抽取

《软件调试(第 2 版)卷1:硬件基础》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值