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文件来帮助我们调试定位问题

  • 相关阅读:
    我们是怎么管理QQ群的
    2014年10月【下】-前端开发半月刊
    我们一般的前端开发流程
    没有素描色彩基础适合学习UI吗,如果可以,该怎么学?
    豪情-关于生活工作学习之感悟-第一篇
    网页插件学javascript还是jquery好啊?
    我们平时是怎么写html和css的?
    2014年10月【上】-前端开发半月刊
    2014年9月-前端开发月刊
    固定滚动菜单
  • 原文地址:https://www.cnblogs.com/yilang/p/11106495.html
Copyright © 2011-2022 走看看