zoukankan      html  css  js  c++  java
  • WinDbg常用命令系列---!analyze

    !analyze命令简介

    这个!analyze扩展显示有关当前异常或错误检查的信息。
    用户模式:
    !analyze [-v] [-f | -hang] [-D BucketID] 
    !analyze -c [-load KnownIssuesFile | -unload | -help ]
    

    内核模式:

    !analyze [-v] [-f | -hang] [-D BucketID] 
    !analyze -c [-load KnownIssuesFile | -unload | -help ]
    !analyze -show BugCheckCode [BugParameters]
    

    参数:

    • -v
      显示详细输出。
    • -f
       生成!analyze异常输出。即使调试器未检测到异常,也可以使用此参数查看异常分析。
    • -hang
      生成!analyze -hang的应用程序输出。当目标遇到错误检查或异常,但分析应用程序挂起的原因与您的问题更相关时,请使用此参数。在内核模式下,!analyze-hang调查系统持有的锁,然后扫描dpc队列链。在用户模式下,!analyze-hang分析线程堆栈,以确定是否有任何线程正在阻塞其他线程。在以用户模式运行此扩展之前,请考虑将当前线程更改为您认为已停止响应的线程(即挂起),因为异常可能已将当前线程更改为其他线程。
    • -D BucketID
      仅显示与指定bucketid相关的项。
    • -show BugCheckCode [BugParameters]
      显示有关由错误检查代码指定的错误检查的信息。BugParameters最多指定四个由空格分隔的错误检查参数。这些参数使您能够进一步优化搜索。
    • -c
       当调试器遇到已知问题时继续执行。如果问题不是“已知”问题,则调试器仍会被分解到目标中。 可以使用 -c具有以下子参数选项。 这些子参数配置已知问题的列表。 它们不会导致进行单独执行。 直到你运行 !analyze -c 加载至少一次 ! 分析 -c没有任何影响。
      -load KnownIssuesFile
      加载指定的已知问题文件。knownissuesfile指定此文件的路径和文件名。此文件必须为XML格式。您可以在调试器安装目录的sdksamplesanalyze_continue子目录中找到一个示例文件。(要使Windows具有此文件,必须已执行调试工具的完整安装。)known issues file文件中的已知问题列表将用于所有以后的-c命令,直到使用-c-unload或再次使用-c-load(此时新数据将替换旧数据)。
      -unload
      卸载当前已知问题列表。
      -help
      在调试器命令窗口中显示此命令的帮助。

    此命令对于用户模式异常和内核模式停止错误(即崩溃)的样本进行分析,在用户模式下,显示有关当前异常的信息。在内核模式下,显示有关最新错误检查的信息。如果出现错误检查,显示信息自动生成。

    !analyze的使用

    调试崩溃的目标计算机或应用程序的第一步是使用!analyze扩展命令。这个扩展执行大量的自动化分析。此分析的结果将显示在调试器命令窗口中。您应该使用-v选项来完全详细地显示数据。

    用户模式!analyze -v示例

    在本例中,调试器附加到遇到异常的用户模式应用程序

    0:000> !analyze -v
    *******************************************************************************
    *                                                                             *
    *                        Exception Analysis                                   *
    *                                                                             *
    *******************************************************************************
    
    Debugger SolutionDb Connection::Open failed 80004005
    

    如果已连接到Internet,调试器将尝试访问由Microsoft维护的故障解决方案数据库。在这种情况下,将显示一条错误消息,指示您的计算机无法访问Internet或网站不工作。

    FAULTING_IP: 
    ntdll!PropertyLengthAsVariant+73
    77f97704 cc               int     3
    

    FAULTING_IP字段显示发生故障时的指令指针。

    EXCEPTION_RECORD:  ffffffff -- (.exr ffffffffffffffff)
    ExceptionAddress: 77f97704 (ntdll!PropertyLengthAsVariant+0x00000073)
       ExceptionCode: 80000003 (Break instruction exception)
      ExceptionFlags: 00000000
    NumberParameters: 3
       Parameter[0]: 00000000
       Parameter[1]: 00010101
       Parameter[2]: ffffffff
    
    异常记录字段显示此崩溃的异常记录。也可以使用.exr(显示异常记录)命令查看此信息。
    BUGCHECK_STR:  80000003
    

    BUGCHECK_STR字段显示异常代码。这个名字用词不当,术语bug check实际上表示内核模式崩溃。在用户模式调试中,在此情况下将显示异常代码0x80000003。

    DEFAULT_BUCKET_ID:  APPLICATION_FAULT
    

    DEFAULT_BUCKET_ID字段显示此故障所属的一般故障类别。

    PROCESS_NAME:  MyApp.exe
    

    PROCESS_NAME字段指定引发异常的进程的名称。

    LAST_CONTROL_TRANSFER:  from 01050963 to 77f97704
    
    LAST_CONTROL_TRANSFER字段显示堆栈上的最后一次调用。在这种情况下,地址0x01050963处的代码调用了0x77f97704处的函数。您可以将这些地址与ln (List Nearest Symbols)命令一起使用,以确定这些地址所在的模块和函数。
    STACK_TEXT:  
    0006b9dc 01050963 00000000 0006ba04 000603fd ntdll!PropertyLengthAsVariant+0x73
    0006b9f0 010509af 00000002 0006ba04 77e1a449 MyApp!FatalErrorBox+0x55 [D:source_filesMyApputil.c @ 541]
    0006da04 01029f4e 01069850 0000034f 01069828 MyApp!ShowAssert+0x47 [D:source_filesMyApputil.c @ 579]
    0006db6c 010590c3 000e01ea 0006fee4 0006feec MyApp!SelectColor+0x103 [D:source_filesMyAppcolors.c @ 849]
    0006fe04 77e11d0a 000e01ea 00000111 0000413c MyApp!MainWndProc+0x1322 [D:source_filesMyAppMyApp.c @ 1031]
    0006fe24 77e11bc8 01057da1 000e01ea 00000111 USER32!UserCallWinProc+0x18
    0006feb0 77e172b4 0006fee4 00000001 010518bf USER32!DispatchMessageWorker+0x2d0
    0006febc 010518bf 0006fee4 00000000 01057c5d USER32!DispatchMessageA+0xb
    0006fec8 01057c5d 0006fee4 77f82b95 77f83920 MyApp!ProcessQCQPMessage+0x3b [D:source_filesMyApputil.c @ 2212]
    0006ff70 01062cbf 00000001 00683ed8 00682b88 MyApp!main+0x1e6 [D:source_filesMyAppMyApp.c @ 263]
    0006ffc0 77e9ca90 77f82b95 77f83920 7ffdf000 MyApp!mainCRTStartup+0xff [D:source_filesMyAppcrtexe.c @ 338]
    0006fff0 00000000 01062bc0 00000000 000000c8 KERNEL32!BaseProcessStart+0x3d
    
    STACK_TEXT字段显示故障线程的堆栈跟踪。
    FOLLOWUP_IP: 
    MyApp!FatalErrorBox+55
    01050963 5e               pop     esi
    
    FOLLOWUP_NAME:  dbg
    
    SYMBOL_NAME:  MyApp!FatalErrorBox+55
    
    MODULE_NAME:  MyApp
    
    IMAGE_NAME:  MyApp.exe
    
    DEBUG_FLR_IMAGE_TIMESTAMP:  383490a9
    
    当!analyze确定可能导致错误的指令时,它在FOLLOWUP_IP字段中显示该指令。symbol_name、module_name、image_name和dbg_flr_image_timestamp字段显示与此指令对应的symbol、module、image name和image timestamp。
    STACK_COMMAND:  .ecxr ; kb
    

    STACK_COMMAND字段显示用于获取堆栈文本的命令。您可以使用此命令重复此堆栈跟踪显示,或更改它以获取相关的堆栈信息。

    BUCKET_ID:  80000003_MyApp!FatalErrorBox+55
    

    BUCKET_ID字段显示当前故障所属的特定故障类别。此类别有助于调试器确定要在分析输出中显示的其他信息。

  • 相关阅读:
    HTML
    HTML协议
    索引原理与慢查询优化
    事务,存储过程
    视图,触发器
    Mysql之单表查询
    剑指offer 面试题4:二维数组中的查找
    剑指offer 面试题3:数组中重复的数字
    剑指offer 面试题2:实现Singleton模式
    剑指offer 面试题1:赋值运算符函数
  • 原文地址:https://www.cnblogs.com/yilang/p/11497323.html
Copyright © 2011-2022 走看看