zoukankan      html  css  js  c++  java
  • 抓取Dump文件的方法和工具介绍

    一、Windows系统的任务管理器里抓dump

    启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件"

    注意事项:

    当你在64位Windows系统上抓32位进程的dmup文件时,如果用的是64位任务管理器,那么在用Windbg加载后,要用!wow64exts.sw切换到X86模式下,如果不想做这步切换,就要用32位的任务管理器来生成dmp文件。32位任务管理器在C:WindowsSysWOW64Taskmgr.exe

     适合的场景:在任务管理器里还能看到进程,当程序出现业务问题、性能问题、失去响应;当程序崩溃跳出系统错误提示框的时候,特别适合应用在客户机出现上述问题时使用。因为我们不用传其他工具到客户机上

    二、用Windbg来抓取

    2.1、方法一:启动windbg ,附加到我们关心的进程,执行命令 .dump [/ma/mdi] [存放路径]

    适合的场景:在任务管理器里还能看到进程,当程序出现业务问题、性能问题、失去响应;当程序崩溃跳出系统错误提示框的时候,适合在公司内部测试时开发人员和测试人员使用

    2.2、方法二  监视特定进程,当某进程崩溃时自动抓取dump

    先运行可能存在问题的程序,然后执行命令在命令行里 执行 ..WinDbgadplus.vbs(exe) -crash -pn qq.exe -o c:1.dmp。运行此命令后,WinDbg会跳出黑色窗口,用于监控进程的运行状况,注意不要关闭这个窗口,否则Dump就抓不到了。在目标进程里执行业务操作,当崩溃后,Dump文件会保存在指定的输出路径里。

    在指定的输出目录下生成如下目录

    参数说明:

    • -crash: 当程序挂掉的一刹那抓取Dump,这个参数只能抓到程序报错时的信息,如果程序不报错,则无法抓到Dump。
    • -hang: 当开启WinDbg之后就开始抓取Dump,主要用于抓取程序异常,但程序未崩溃的情况,例如进程的CPU使用率100%。
    • -pn:进程的PID或进程名,如果是进程名,会区分大小写。
    • -o: Dump输出路径.

    适合的场景:程序已经运行但不知道什么时候会崩溃且不会有错误提示框的情况。

    2.3、方法三 将Windbg设置为默认调试工具

    首先,执行 在命令行Windbg.exe -I 设置为默认调试工具,会弹出Windbg窗口

    点“确定”窗口消失,然后运行程序和操作,当程序崩溃时WibDbg窗口再次弹出来,在windbg 命令行执行命令.dump [/ma/mdi] [存放路径]

    参数说明:

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

    适合的场景:不知道什么时候会崩溃。无需指定要抓取的进程或PID,也不要求设置环境时必须存在进程,只要任意程序崩溃后都可以抓到Dump。

    三、修改注册表

    @echo off  
    echo 正在启用Dump...  
    reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps"  
    reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpFolder /t REG_EXPAND_SZ /d "C:CrashDump" /f  
    reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpType /t REG_DWORD /d 2 /f  
    reg add "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /v DumpCount /t REG_DWORD /d 10 /f  
    echo Dump已经启用  
    pause  
    @echo on 

    将上述内存保存为*.bat,然后执行,就开始了自动抓dmp文件的功能,只要有程序崩溃,就会在指定的目录下生成。

    键值说明:

    名称:DumpCount,类型:REG_DWORD,最大保留Dump个数,默认为10.
    名称:DumpType,类型:REG_DWORD,Dump类型(1-Mini dump, 2-Full dump),默认为1.
    名称:DumpFolder,类型:REG_EXPAND_SZ,Dump文件保存的位置。

    当不需要自动抓取时,可以将下面的内容

    @echo off  
    echo 正在关闭Dump...  
    reg delete "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsWindows Error ReportingLocalDumps" /f  
    echo Dump已经关闭  
    pause  
    @echo on 

    保存为bat执行,就不会在自动产生了

    适合的场景:也是不知道什么时候程序会崩溃,也无法确定崩溃是否会重现,只要有崩溃就会被抓取,万无一失。

    四、编程

    直接使用Windows的API——MiniDumpWriteDumpSetHandleExceptionFilter。在我们自己的应用里使用这两个API来实现程序崩溃时自动产生dump文件,并且还可以实现自己的dump上传机制等,不过要注意如果某些库会导致我们程序的机制失效。

    五、Process Explorer

     这个也是要注意在64位机上抓32位进程的问题,跟任务管理一样处理

    写在最后:当然还有更多的工具和方法,包括上面介绍的工具和方法,我们可以根据实际情况和需要灵活应用,抓取dmp文件来帮助我们调试定位问题

  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/yilang/p/11106495.html
Copyright © 2011-2022 走看看