https://www.qcloud.com/community/article/511817

转者注:让我感觉以前看蓝屏都白看了~~~原来蓝屏也可以分析具体原因。

适用场景:Windows 系列系统异常宕机(蓝屏)且存在Dump文件(*.dmp)

相关背景解释:众所周知,Windows历史上BUG比较多,无故宕机、程序卡死的例子较多,为了避免无迹象可循的情况,Microsoft 推出 Dump机制在宕机时先进行蓝屏收集宕机前状态,并且可以捕获到导致异常的关键错误,当Windows出现异常Crash时Windows会调用Dump系统来形成一个转储文件(*.dmp),通过特殊工具可以进行分析。

如何确保有Dump文件?

1、 要清楚,Dump文件是Windows启动的一个保险机制,而蓝屏主要是用做给系统争取时间进行收集Dump文件所用,所以一个逻辑是必然会有的,那就是如果蓝屏必然触发Dump机制,Dump机制会根据系统设置进行Mini或Full的收集。

2、 关于Dump文件的大小,如果Dump设置的存放位置不满足Dump文件大小也是不会产生Dump文件:

a) MiniDump文件大小:取决于Windows 运行时内存页大小,比如当前CVM跑的是数据库,那么产生的Dump文件大小就是数据库交换内存的概要信息,比如说16G内存有20%被使用,宕机时所产生的Dump文件就是3.2g的概要信息(即涉及到的进程的大概地址)

b) FullDump文件大小:取决于Windows物理内存大小,FullDump即完整收集模式,将整个系统在宕机时的整个内存运行态进行记录,通常该文件的大小是物理大小的1.0 ~ 1.5倍左右(倍数的浮动取决于虚拟内存交换设置的大小)

3、 所以,要确保有Dump文件,最低条件是:

a) 开启Windows系统的Dump

b) 确保设置的位置剩余空间是物理内存1.5倍以上

c) 若要完整的Dump日志进行分析,请选择完整收集模式

注1:QCloud Windows Server 2008R2为避免磁盘风险,默认不开启FullDump模式,所以如果需要详细Debug文件,则手动开启即可:
如果您想要启用完全内存转储选项,手动设置为 0x1 以下注册表子项下的CrashDumpEnabled注册表项并重新启动 Windows:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

注2:也可以使用Memory Dump Configuration工具进行设置

蓝屏文件俗称BSOD(Blue Screen Of Death),一般出现后处理方式就只有重启,蓝屏的产生原因是:

BSOD有三大规则会触发:

  • 保护规则:当低级特权的代码直接访问高级特权代码与数据时(如某些安全防护软件通过用户态进行驱动修改)就会触发BSOD;
  • 异常处理:程序异常时程序本身没有写好完整的异常处理回路,系统接收到异常则启动先行中断机制,所以程序设计存在问题时也有可能触发蓝屏(比如之前0Day漏洞黑客所用的工具导致蓝屏,明显就是没有写好异常处理回路)
  • SDK、DDK中调用了只有在特定IRQL调用的内核参数,即只有特定CPU中断请求的时候才可以使用DDK调用的内核参数在未到中断请求时被发起调用(一般出现于.Net Winform应用中)

在腾讯云主机上,一般第一、二规则导致的BSOD Case比较多。

附蓝屏产生过程:

转储原理:

一、 BSOD分析:

虽然BSOD必然会输出Dump文件,但是BSOD也会带来相关有用的信息,一般BSOD呈现方式为:

  • 浅蓝框:序言、错误的信息描述
  • 中间部分:建议的措施
  • 红色框:相关中断的代码及其参数

关于 浅蓝框 跟 中间部分 基本可以忽略,作为排错需要关注的下面红色框的参数,下面具体举个例子:

*STOP:0x0000007F(0xc0000005,0x808945CF,0xF78A6A88,0XF78A6784)

0x0000007F:7F,即导致BSOD的关键代码,通常可以在https://support.microsoft.com/zh-cn/search 可以搜索到
0xc0000005:5,涉及的进程对象(Process Object)
0x808945CF:对应对象的指针(指向位置)
0xF78A6A88:进程涉及的映像名
0XF78A6784:备注解析信息等

二、Dump文件分析

1、 WinDbg工具环境准备,配置好symbol 路径,使其用相关Debug命令时可以自动加载对应module(Minidump可能信息提供较少):

2、 设置Path路径为SRVD:\sysmbolshttp://msdl.microsoft.com/download/symbols 使其在加载相关module(最常见就是NT)时自动从mircosoft 进行下载

Eg:Open Crash Dump时自动加载涉及到的Module:

对应文件夹出现相关Modeule:

3、 打开*.dmp文件:

4、 初始界面如下:

5、 点击!analyze –v 可以进行自动分析,可以看到这个Dump是因为底层调用netkvm.sys导致crash:

6、 但是大部分Crash并不是如例子所示就可以明确看出涉及的驱动进程,所以可以使用!process [0,0]查看crash时hang住的进程:

7、 通过!thread 可以到进程中涉及的线程信息(可以看到这里是Idel时系统Crash掉):

8、 如果是系统组件导致的问题的,可以通过lm kv 导出加载的内核模块:

9、 !vm 可以看出crash时内存状态(可以看到用户的 175ptServer.exe 进程占用较高):

10、 当然也可以通过memory视图来定位thread hang在什么位置:

11、 WinDbg提供大量其他视图可以辅助定位原因,可以根据实际case进行灵活使用(比如Disassembly视图也是很好用的一个功能):

后言

Windows系统方面的 MiniDump提供信息较少,FullDump在Memory这块信息会比较多,具体使用方法需要根据具体Case来灵活调整使用。

附常见命令:

(1)进程: !process [0 0];dt nt!_eprocess;dt nt!_kprocess;
(2)线程: !thread;dt nt!_ethread;dt nt!_kthread;
(3)I/O请求包: dt nt!_irp;!irpfind;
(4)常见同步对象:lkd> dt nt!_kevent;lkd> dt nt!_kmutant;lkd> dt nt!_ksemaphore;
(5)作业:lkd> !job;会话(lkd> !session);内存管理(lkd> !vm)的命令等。

附件是WinDbg使用指南(English版)

如何分析 WindowsDump:Dump 起源与初始设置的更多相关文章

  1. Linux gdb分析core dump文件

    文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump1. c ...

  2. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  3. linux下生成core dump文件方法及设置

    linux下生成core dump文件方法及设置    from:http://www.cppblog.com/kongque/archive/2011/03/07/141262.html core ...

  4. [转载]移动终端浏览器初始设置apple-mobile-web-app-capable

    这两句话的确很有用,有了它,手机访问的时候像样了. 原文地址:移动终端浏览器初始设置apple-mobile-web-app-capable作者:素水凌心 移动终端浏览器默认设置视口的宽度和初始规模. ...

  5. python笔记:#003#PyCharm 的初始设置

    PyCharm 的初始设置(知道) 目标 恢复 PyCharm 的初始设置 第一次启动 PyCharm 新建一个 Python 项目 设置 PyCharm 的字体显示 PyCharm 的升级以及其他 ...

  6. ArcGis恢复初始设置(默认设置、出厂设置)的方法

    警告:下面的操作涉及更改操作系统的重要组成部分.必要时,请咨询计算机系统专业人士. 重命名 ESRI 文件夹即对 ArcGIS 恢复出厂设置,因此必须重新安装当前安装的所有第三方工具.自定义脚本和自定 ...

  7. 安装oracle11g client 【INS-30131】执行安装程序验证所需的初始设置失败的解决方法

    今天在服务器(操作系统windows server 2008R2)上安装Oracle11g 客户端,弹出“执行安装程序验证所需的初始设置失败”,如上图.网上找了一些方法,简单整理如下,仅供参考. 问题 ...

  8. 安装oracle11g INS-30131执行安装程序验证所需的初始设置失败的解决方法

    安装oracle11g [INS-30131] 执行安装程序验证所需的初始设置失败. 解决方法 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER 启动 TCP/I ...

  9. CenOS下安装 Git,Git的初始设置,添加文件,提交文件

    一.配置DNS 1,配置DNSvi /etc/resolv.conf加入: 代码如下: nameserver 192.168.0.1 nameserver 8.8.8.8 nameserver 8.8 ...

随机推荐

  1. windows 下python导入excel

    1.安装相应包 2.导入代码

  2. 移动端js模拟截屏生成图片并下载功能的实现方案

    一.根据PM需求如下: 移动端wap 实现将二维码生成图片下载至用户手机相册保存 二.根据现有思路: 1.使用第三方工具html2canvas,将页面中指定范围的dom转换为canvas 2.随后使用 ...

  3. linux Makefile(中文版1)

    ############################################################################## Generic Makefile for ...

  4. 猎豹免费WiFi-随身WiFi共享热点,永久免费的无线路由器 - imsoft.cnblogs

  5. hdu2087 剪花布条 暴力/KMP

    在字符串中不可重叠地寻找子串数量,暴力/KMP #include<stdio.h> #include<string.h> int main(){ ],b[]; ]!='#'){ ...

  6. wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示

    目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]详解(一)主窗口 圆形菜单... wpf 客 ...

  7. USB设备驱动_WDS

    1. usb_alloc_dev中的 bus_type 中指定了匹配函数,和uevent中的环境参数. ====>不同的bus_type的匹配函数可能是不同的,uevent的环境变量参数也可能是 ...

  8. 使用点聚 weboffice 以及vsto、 web service 实现word 的自动化文档处理

    开发环境的搭建: 1.visual studio 2010 2. 点聚web office 开发步骤 1. 创建word vsto 项目 比较简单 1. 添加任务窗格 页面如下: 代码如下: 1. 使 ...

  9. web开发的一些总结

    现在我们是在互联网的时代,到处可以使用internet 这些年的发展,让we 成为了当前开发的主流,包括现在好多的移动端开发, 很多也是使用web 页面进行呈现,因为web 拉近了你我之间的距离.对于 ...

  10. Qt下 QString转char*(转)

    Qt下面,字符串都用QString,确实给开发者提供了方便,想想VC里面定义的各种变量类型,而且函数参数类型五花八门,经常需要今年新那个类型转换 Qt再使用第三方开源库时,由于库的类型基本上都是标准的 ...