关于后端:dump基础

2次阅读

共计 1861 个字符,预计需要花费 5 分钟才能阅读完成。

一、前言

DUMP: 将过程或零碎在某一时间点的内存信息转储为一个文件。须要抓取 dump 的状况:罕用于过程解体、卡死、卡住一段时间、零碎卡死无奈操作、零碎蓝屏时的问题剖析。

二、术语

1、转储分类

小内存转储(mini dump):只是保留内存前 64K 的根本内存空间的数据
外围内存转储(kernel dump):保留操作系统和相干零碎级别服务的数据,零碎内核态信息
齐全内存转储(full dump):就是将内存中的数据全副保留,包含零碎数据和用户数据,蕴含内核态和用户态的信息

三、具体操作

1、如何抉择是抓取 dump 文件

a、过程解体、卡死、卡住一段时间,须要过程的 full dump 信息
b、操作系统卡死无奈操作,须要 full dump 信息
c、操作系统蓝屏,少数状况只须要 kernel dump 信息

mini dump 在少数状况下都无奈剖析出问题的具体起因,只能初步判断问题产生工夫、频次和问题可能与哪方面无关

2、如何获取 Windows 操作系统的 DUMP

3、如何获取过程 DUMP

1)过程解体有弹窗

当第三方程序解体后,在未点击弹窗窗口上的敞开或其余按钮时,所有错误信息都还保留在主机的内存中,这时间接抓取 Dump 文件。

办法 1:
①以管理员身份运行 ProcessExplorer 程序,而后鼠标左键按住界面上的瞄准镜图标,而后拖动到报错的窗口或者相应过程的窗口上松开鼠标
,此时,ProcessExplorer 会主动定位到出错的过程上;
②而后右键点击该过程,抉择 ”Create Dump”,而后抉择 ”Create Full Dump”,抉择保留的门路,产生 dump 文件
留神:若不是管理员运行,会提醒回绝拜访。

办法 2:
①如有多个过程无奈确定 PID,参照办法 1 用 ProcessExplorer 定位一下解体过程的 PID;
②运行 WinDbg 后,顺次点击 ”File”,而后抉择 ”Attach to a Process”;
③在弹出的界面中,找到方才捕捉到的 PID 或者输出 PID,而后点 OK;
④点完 OK 后,你就会看到能够抓取 Dump 的界面了,再用 dump 保留参数保留 Dump 即可:.dump -mfh c:\xxxx.dmp

办法 3:
①如有多个过程无奈确定 PID,参照办法 1 用 ProcessExplorer 定位一下解体过程的 PID;
②关上工作管理器,找到相应过程,右键点击,抉择 ” 创立转储文件 ”;
③依据转储文件提醒门路,提取 dump 文件;

办法 4:实用于零碎过程弹窗解体

此时应用 ProcessExplorer 去抓取这个弹框的过程,抓这个过程的 DUMP,必定是会抓错的。这种弹框是零碎过程弹的,弹框上显著的通知了是哪个过程解体,间接去抓那个过程就行。

2)过程解体时无弹窗

此时须要应用 WinDbg 监控过程解体状况,一旦呈现解体即刻弹窗捕捉。
特点:
①无需指定要抓取的过程或 PID,也不要求设置环境时必须存在过程,只有任意程序解体后都能够抓到 Dump;
②必须在呈现问题之前,先安排好抓取环境;
③程序失常敞开时,比方点敞开时,不会生成 Dump,只有程序解体时才会生成。
步骤:
①设置 WinDbg 抓取环境。在“开始”—“运行”输出 windbg 门路:C:\WinDbg\Windbg.exe -I (留神这里是 i 的大写字母,不是 L 的小写)
②运行该参数时,WinDbg 会弹出一个提醒 (WinDbg was successfully installed as the default postmortem debugger,),点击确定后 WinDbg 界面会隐没。此时就代表环境曾经设置好,当初就须要等过程解体。
③在程序解体时,WinDbg 窗口会自动弹进去时,应用命令保留 Dump 文件:.dump -mfh d:\test.dmp
留神:当开始保留 Dump 文件时,左下角的状态信息会变成 Busy,示意 WinDbg 正在工作,Dump 保留实现后会呈现“Dump successfully written”这个提醒
抓取完 dump 好后,敞开默认调试器的设置:
对于 32 位操作系统:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger
对于 64 位操作系统:HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Windows NT/CurrentVersion/AeDebug/Debugger

在这个注册表项中,调整 Auto 值为 0,这里的 0 示意呈现解体弹出对话框让用户抉择调试器,1 示意自动弹出默认的调试器。
正文完
 0