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格式。您可以在調試器安裝目錄的sdk\samples\analyze_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_files\MyApp\util.c @ 541]
0006da04 01029f4e 01069850 0000034f 01069828 MyApp!ShowAssert+0x47 [D:\source_files\MyApp\util.c @ 579]
0006db6c 010590c3 000e01ea 0006fee4 0006feec MyApp!SelectColor+0x103 [D:\source_files\MyApp\colors.c @ 849]
0006fe04 77e11d0a 000e01ea 00000111 0000413c MyApp!MainWndProc+0x1322 [D:\source_files\MyApp\MyApp.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_files\MyApp\util.c @ 2212]
0006ff70 01062cbf 00000001 00683ed8 00682b88 MyApp!main+0x1e6 [D:\source_files\MyApp\MyApp.c @ 263]
0006ffc0 77e9ca90 77f82b95 77f83920 7ffdf000 MyApp!mainCRTStartup+0xff [D:\source_files\MyApp\crtexe.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字段顯示當前故障所屬的特定故障類別。此類別有助於調試器確定要在分析輸出中顯示的其他信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM