zoukankan      html  css  js  c++  java
  • WinDbg抓取程序报错dump文件的方法

    程序崩溃的两种主要现象:

    a. 程序在运行中的时候,突然弹出错误窗口,然后点错误窗口的确定时,程序直接关闭

    例如: “应用程序错误” “C++错误之类的窗口” “程序无响应” “假死”等

    此种崩溃特点:程序已异常,在你未点出错窗口的确定或其他按,所有错误信息都还保留在PC的内存中,可以直接抓取Dump文件。当然,如果你知道

    怎么样操作可以让程序崩溃,也可以用守株待兔的抓取方法抓Dump文件。

    b.程序在运行中的时候,窗口和进程突然消失,没有任何错误窗体

    典型的现象:程序自动关闭 或者玩游戏时,游戏界面自动消息等。

    此种崩溃的特点:程序是自动崩溃的,当程序崩溃后,所有错误信息就都消息了,如果你要抓取这种崩溃的Dump,就必须先设置好抓取环境,否则是无

    法抓取Dump文件的。

    以上是两种最常见的程序崩溃现象,下面分享利用Windbug工具抓取dump文件的方法。

    a. 抓取方法一

    此方法特点:

    1. 必须指定要抓取的进程或PID,同时程序必须已经在运行,否则无法抓dump.

    2.必须在出现问题之前,先布置好抓取环境。

    3.正常关闭进程也会出现DUMP文件,因此需要确定抓到的Dump是在程序崩溃时生成的。

    step1: 下载需要使用的工具

    windbg: 此工具是抓取dump的主角。

    step2: 设置Windbg抓取环境

    先运行可能存在问题的程序,例如:IE,如果不先运行程序,则无法抓Dump。

    然后将下载的Windbg解压到任意盘符,例如C盘,使用下面的参数抓取Dump。

    C:WinDbgadplus.vbs -crash -pn ieexplore.exe -o d:

    运行此命令后,WinDbg会跳出黑色窗口,用于监控进程的运行状况,注意不要关闭这个窗口,否则Dump就抓不到了。

    WinDbg参数说明:

    -crash: 当程序挂掉的一刹那抓取Dump,这个参数只能抓到程序报错时的信息,如果程序不报错,则无法抓到Dump。

    -hang: 当开启WinDbg之后就开始抓取Dump,主要用于抓取程序异常,但程序未崩溃的情况,例如进程的CPU使用率100%。

    -pn:进程的PID或进程名,如果是进程名,会区分大小写。

    -o: Dump输出路径.

    step3:收集Dump文件

    当程序崩溃后,Dump文件会保存在指定的输出路径内,例子中的Dump保存路径是D盘,然后打包Dump文件,提交给软件官方。

    b.抓取方法二

    此方法特点:

    1. 无需指定要抓取的进程或PID,也不要求设置环境时必须存在进程,只要任意程序崩溃后都可以抓到Dump。

    2. 必须在出现问题之前,先布置好抓取环境。

    3.程序正常关闭时,比如点X时,不会生成Dump,只有程序崩溃时才会生成。

    step1:下载需要使用的工具

    step2:设置WinDbg抓取环境

    将下载的工具解压到任意盘符,比如C盘,使用下面的参数抓取Dump:

    C:WinDbgWindbg.exe -I

    运行此参数时,Windbg会弹出一个提示,点确定后Windbg界面会消失,此时代表环境已经设置好,现在就需要你想方设法让程序崩溃,比如IE崩溃。

    WinDbg参数说明:

    -I: 将WinDbg作为默认的调试工具,注意I必须为大写,小写无效。

    Step3:收集Dump文件

    在程序崩溃时,WibDbg窗口再次弹出来时,使用以下命令保存Dump文件。

    .dump -ma d: est.dmp

    当开始保存Dump文件时,左下角的状态信息会变成*Busy*,表示WinDbg正在工作,Dump保存完成后会出现"Dump successfully written"这个提示,接

    下来就等Dump保存好,然后把Dump文件打包提交软件官方。

    c.抓取方法三

    此方法特点:

    可以在程序报错后,直接抓取Dump文件,不需要额外设置,适用于突然发现报错,且不确定能否复现问题时抓取Dump,这是一个非常重要的抓取方法,

    强烈建议大家记住。

    step1:下载需要使用的工具

    ProcessExplorer:此工具用于定位报错窗口的进程ID

    step2:使用ProcessExplorer定位报错窗口的进程PID

    step3:运行WinDbg,抓取Dump文件

    运行Windbg后,依次点”File" --> "Attack to a Process" ,在弹出的界面中,找到刚才捕捉到的PID,然后点OK.

    点OK完成后,你就会看到可以抓取的Dump界面了,再用dump保存参数保存dump即可。

    .dump -ma d: est.dmp

    WinDbg参数说明:

    -m: 却省选项,生成标准的minidump,转储文件通常较小,便于在网络上通过邮件或其它方式传输。这种文件的信息量较少,只包含系统信息、加载的模块DLL信息,

    进程信息和线程信息。

    -ma:带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块等等),文件较大,但如果条件允许(本机调试,局域网环境),推荐用这个。

    -mFhutwd: 带有数据段,非共享的读、写内存页和其他有用的信息的minidump,包含了通过minidump能够得到的最多的信息。是一种折中方案。

  • 相关阅读:
    js call
    正则简单学习
    第10天:apply和call、bind、函数作为参数、返回值使用、闭包、递归的样例
    第9天:原型、继承、函数使用推荐以及this的指向
    Identity Server introspect 调用 /connect/introspect
    windows forget jenkins password.
    转载(Asp.net Core 中试使用ZKWeb.System.Drawing)
    EFCore & Mysql migration on Production
    HTML to PDF pechkin
    Log4net
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/4268467.html
Copyright © 2011-2022 走看看