修电脑最烦的不是别的,最烦的是 Random 蓝屏错误。因为你也不知道什么时候就蓝屏了。这种随机性还有无错误报告的问题最让人头疼。不过其实 Windows 每次蓝屏都会在系统目录下生成一个 Dump File 。也就是所谓分析报告。不过想要看懂这个报告,就需要一些技巧了。

 

dump文件分析 idea java dump文件分析蓝屏_符号表

一般来说,读取 Mini Dump 文件,只需要用 Nirsoft 的 BlueScreenView 即可轻松查看。不过这个软件只是轻量级的分析工具。只是给你提供崩溃时间,崩溃代码,引起崩溃的文件,崩溃内存地址等等。需要自己进行手动分析,对于很多小白来说,这就是天书啊。

dump文件分析 idea java dump文件分析蓝屏_dump文件分析 idea java_02

好吧,那么有没有帮你分析这些天书代码的工具呢?有!那就是 WinDBG 这个 Windows 自己开发的 Debug 工具 – WinDbg。

一、什么是 WinDbg ?

WinDbg是在windows平台下,强大的用户态和内核态调试工具。它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏、程序崩溃(IE崩溃)原因,是我们日常工作中必不可少的一个有力工具,学会使用它,将有效提升我们的问题解决效率和准确率。

二、WinDbg 下载地址

蓝屏Dump分析工具 x86位版本下载:【微软官方安装版

蓝屏Dump分析工具 x64位版本下载:【微软官方安装版

如果你用的是 Windows 10 的话,建议下载官方 SDK
下载链接

安装选项很多,只需要选择 Debugging Tool For Windows 即可。如图:

dump文件分析 idea java dump文件分析蓝屏_dump文件分析 idea java_03

三、如何使用 WinDbg

首先,我们需要设置符号表,符号表是WinDbg关键的“数据库”,里边储存着各种蓝屏代码的分析结果。如果没有它,WinDbg基本上就是个废物,无法分析出更多问题原因。

1、运行WinDbg软件,然后按【Ctrl+S】弹出符号表设置窗
2、将符号表地址:SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols 粘贴在输入框中,点击确定即可。
注:红色字体为符号表本地存储路径,建议固定路径,可避免符号表重复下载。

dump文件分析 idea java dump文件分析蓝屏_蓝屏_04

dump文件分析 idea java dump文件分析蓝屏_Windows_05

当你拿到一个dmp文件后,可使用【Ctrl+D】快捷键来打开一个dmp文件,或者点击WinDbg界面上的【File=>Open Crash Dump…】按钮,来打开一个dmp文件。第一次打开dmp文件时,可能会收到如下提示,出现这个提示时,勾选“Don’t ask again in this WinDbg session”,然后点否即可。

dump文件分析 idea java dump文件分析蓝屏_符号表_06

当你想打开第二个dmp文件时,可能因为上一个分析记录未清除,导致无法直接分析下一个dmp文件,此时你可以使用快捷键【Shift+F5】来关闭上一个dmp分析记录。

至此,简单的WinDbg使用你已经学会了!

五、通过简单的几个步骤学会分析一些dmp文件。

1. 随便打开一个 Dump 文件,然后我们可以看到下边有个蓝色的 Analyze 的链接,这个链接就是分析蓝屏的工具链接

dump文件分析 idea java dump文件分析蓝屏_符号表_07

然后你可以看到这些信息:

!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************

WHEA_UNCORRECTABLE_ERROR (124)
A fatal hardware error has occurred. Parameter 1 identifies the type of error
source that reported the error. Parameter 2 holds the address of the
WHEA_ERROR_RECORD structure that describes the error conditon.
Arguments:
Arg1: 0000000000000000, Machine Check Exception
Arg2: ffff8305fd0dd028, Address of the WHEA_ERROR_RECORD structure.
Arg3: 00000000b6000004, High order 32-bits of the MCi_STATUS value.
Arg4: 000000000001010a, Low order 32-bits of the MCi_STATUS value.

Debugging Details:
——————

DUMP_CLASS: 1

DUMP_QUALIFIER: 400

BUILD_VERSION_STRING: 10.0.15063.674 (WinBuild.160101.0800)

SYSTEM_MANUFACTURER: Acer

SYSTEM_PRODUCT_NAME: Aspire ES1-711

SYSTEM_SKU: Aspire ES1-711_0843_1_08

SYSTEM_VERSION: V1.08

BIOS_VENDOR: Insyde Corp.

BIOS_VERSION: V1.08

BIOS_DATE: 10/28/2015

BASEBOARD_MANUFACTURER: Acer

BASEBOARD_PRODUCT: EA70_BM

BASEBOARD_VERSION: Type2 – A01 Board Version

DUMP_TYPE: 2

BUGCHECK_P1: 0

BUGCHECK_P2: ffff8305fd0dd028

BUGCHECK_P3: b6000004

BUGCHECK_P4: 1010a

BUGCHECK_STR: 0x124_GenuineIntel

CPU_COUNT: 4

CPU_MHZ: 877

CPU_VENDOR: GenuineIntel

CPU_FAMILY: 6

CPU_MODEL: 37

CPU_STEPPING: 8

CPU_MICROCODE: 0,0,0,0 (F,M,S,R) SIG: 829’00000000 (cache) 0’00000000 (init)

CUSTOMER_CRASH_COUNT: 1

DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT

CURRENT_IRQL: 0

ANALYSIS_SESSION_HOST: SERVICE01

ANALYSIS_SESSION_TIME: 10-17-2017 15:18:05.0073

ANALYSIS_VERSION: 10.0.16299.15 amd64fre

STACK_TEXT:
fffff801`aa64ca38 fffff801`a824e5cf : 00000000`00000124 00000000`00000000 ffff8305`fd0dd028 00000000`b6000004 : nt!KeBugCheckEx
fffff801`aa64ca40 fffff801`a84ed2fd : ffff8305`fd0dd028 ffff8305`fc5ac790 ffff8305`fc5ac790 ffff8305`fc5ac790 : hal!HalBugCheckSystem+0xcf
fffff801`aa64ca80 fffff801`a824eaf8 : 00000000`00000728 00000000`00000000 00000000`00000000 00000000`00000000 : nt!WheaReportHwError+0x25d
fffff801`aa64cae0 fffff801`a824ee58 : 00000000`00000010 00000000`00000000 fffff801`aa64cc88 00000000`00000000 : hal!HalpMcaReportError+0x50
fffff801`aa64cc30 fffff801`a824ed46 : ffff8305`fbea5650 00000000`00000001 00000000`00000000 00000000`00000000 : hal!HalpMceHandlerCore+0xe0
fffff801`aa64cc80 fffff801`a824ef8a : 00000000`00000004 00000000`00000001 00000000`00000000 00000000`00000000 : hal!HalpMceHandler+0xda
fffff801`aa64ccc0 fffff801`a824f120 : ffff8305`fbea5650 fffff801`aa64cef0 00000000`00000000 00000000`00000000 : hal!HalpMceHandlerWithRendezvous+0xce
fffff801`aa64ccf0 fffff801`a84076bb : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : hal!HalHandleMcheck+0x40
fffff801`aa64cd20 fffff801`a840742c : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KxMcheckAbort+0x7b
fffff801`aa64ce60 fffff801`a83881d3 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KiMcheckAbort+0x1ac
ffffa001`1208c898 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!ST_STORE<sm_traits>::ST_HASH_ENTRY_COMPARATOR::Compare+0x33

THREAD_SHA1_HASH_MOD_FUNC: 1229599e20a8e52284b639d82c0e4b08e5ebac03

 

THREAD_SHA1_HASH_MOD_FUNC_OFFSET: 947846f6d18d00900d62ba102bf881c74cd600ba

 

THREAD_SHA1_HASH_MOD: bba6629b38ee48af58586b1285e003efb528212b

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: GenuineIntel

IMAGE_NAME: GenuineIntel

DEBUG_FLR_IMAGE_TIMESTAMP: 0

STACK_COMMAND: .thread ; .cxr ; kb

FAILURE_BUCKET_ID: 0x124_GenuineIntel_PROCESSOR_CACHE

BUCKET_ID: 0x124_GenuineIntel_PROCESSOR_CACHE

PRIMARY_PROBLEM_CLASS: 0x124_GenuineIntel_PROCESSOR_CACHE

TARGET_TIME: 2017-10-17T16:11:46.000Z

OSBUILD: 15063

OSSERVICEPACK: 674

SERVICEPACK_NUMBER: 0

OS_REVISION: 0

SUITE_MASK: 784

PRODUCT_TYPE: 1

OSPLATFORM_TYPE: x64

OSNAME: Windows 10

OSEDITION: Windows 10 WinNt TerminalServer SingleUserTS Personal

OS_LOCALE:

USER_LCID: 0

OSBUILD_TIMESTAMP: 2017-09-29 03:20:26

BUILDDATESTAMP_STR: 160101.0800

BUILDLAB_STR: WinBuild

BUILDOSVER_STR: 10.0.15063.674

ANALYSIS_SESSION_ELAPSED_TIME: 14b0

ANALYSIS_SOURCE: KM

FAILURE_ID_HASH_STRING: km:0x124_genuineintel_processor_cache

FAILURE_ID_HASH: {4c8f3f5e-1af5-ed8b-df14-d42663b1dfa7}

Followup: MachineOwner

最上方的一部分是电脑的基本信息,这部分信息基本没什么用,然后是蓝屏错误的偏移地址。如果你不懂汇编什么的,这部分对你也没什么用。最重要的部分是这里:

dump文件分析 idea java dump文件分析蓝屏_符号表_08

从这里可以看出来,出错的模块:MODULE_NAME 是 GenuineIntel,另外错误信息是 0x124_GenuineIntel_PROCESSOR_CACHE ,也就是说 Intel CPU 的缓存出现了错误。基本上可以判定是硬件问题。换个 CPU 试试修理即可。

附:设置 Windows Dump 文件

一般 Windows 默认是直接把所有的信息保存在 Windows 文件夹下的 MEMORY.DMP 文件。不过经常这个文件不存在,或者说你只需要一个 Mini Dump 文件就够了。那么你可以这样设置:

1. Win + Pause ,进入系统信息界面
2. System Protection

dump文件分析 idea java dump文件分析蓝屏_dump文件分析 idea java_09

3. Advanced – Setting

dump文件分析 idea java dump文件分析蓝屏_符号表_10

4. 将下拉菜单中的 Dump 文件设置改为 Mini Dump

dump文件分析 idea java dump文件分析蓝屏_dump文件分析 idea java_11

5. 然后再次蓝屏后,Dump 文件会保存在 Windows\Minidump 这个文件夹中。

PS:
另外一些常见的蓝屏错误还有 Driver、显卡 之类的错误。多积累经验就能简单判定了。另外也可以将分析的文件递交给 Microsoft,或者去一些论坛发帖。用下搜索引擎,基本上都可以找到答案的。