日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.lastevent、!analyze(dump分析、异常错误码查询)

發布時間:2025/3/15 编程问答 78 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .lastevent、!analyze(dump分析、异常错误码查询) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.lastevent

.lastevent?命令顯示最近一次發生的異常或事件。

[cpp]?view plaincopy
  • 0:000>?.lastevent??
  • Last?event:?1534.f4c:?Break?instruction?exception?-?code?80000003?(first?chance)??
  • ??debugger?time:?Tue?May?22?10:47:26.962?2012?(GMT+8)??
  • 0:000>?~??
  • .??0??Id:?1534.e8c?Suspend:?1?Teb:?7ffdf000?Unfrozen??
  • ???1??Id:?1534.1338?Suspend:?1?Teb:?7ffde000?Unfrozen??
  • #??2??Id:?1534.f4c?Suspend:?1?Teb:?7ffdd000?Unfrozen??
  • 我們可以看出,當前為2號線程發生異常,線程0前面的點號(.)表示它是當前線程。線程2前面的數字號(#)表示它是產生異常或調試器附加到進程時活動的線程。如果使用CTRL+C、 CTRL+BREAK或Debug | Break中斷到調試器,總是會產生一個 0x80000003異常代碼。

    [cpp]?view plaincopy
  • 0:000>?.lastevent??
  • Last?event:?1664.4184:?Access?violation?-?code?c0000005?(first/second?chance?not?available)??
  • ??debugger?time:?Thu?Aug?13?11:20:44.037?2015?(GMT+8)??
  • 異常錯誤碼查詢

    異常 描述
    EXCEPTION_ACCESS_VIOLATION 0xC0000005 程序企圖讀寫一個不可訪問的地址時引發的異常。例如企圖讀取0地址處的內存。
    EXCEPTION_ARRAY_BOUNDS_EXCEEDED 0xC000008C 數組訪問越界時引發的異常。
    EXCEPTION_BREAKPOINT 0x80000003 觸發斷點時引發的異常。
    EXCEPTION_DATATYPE_MISALIGNMENT 0x80000002 程序讀取一個未經對齊的數據時引發的異常。
    EXCEPTION_FLT_DENORMAL_OPERAND 0xC000008D 如果浮點數操作的操作數是非正常的,則引發該異常。所謂非正常,即它的值太小以至于不能用標準格式表示出來。
    EXCEPTION_FLT_DIVIDE_BY_ZERO 0xC000008E 浮點數除法的除數是0時引發該異常。
    EXCEPTION_FLT_INEXACT_RESULT 0xC000008F 浮點數操作的結果不能精確表示成小數時引發該異常。
    EXCEPTION_FLT_INVALID_OPERATION 0xC0000090 該異常表示不包括在這個表內的其它浮點數異常。
    EXCEPTION_FLT_OVERFLOW 0xC0000091 浮點數的指數超過所能表示的最大值時引發該異常。
    EXCEPTION_FLT_STACK_CHECK 0xC0000092 進行浮點數運算時棧發生溢出或下溢時引發該異常。
    EXCEPTION_FLT_UNDERFLOW 0xC0000093 浮點數的指數小于所能表示的最小值時引發該異常。
    EXCEPTION_ILLEGAL_INSTRUCTION 0xC000001D 程序企圖執行一個無效的指令時引發該異常。
    EXCEPTION_IN_PAGE_ERROR 0xC0000006 程序要訪問的內存頁不在物理內存中時引發的異常。
    EXCEPTION_INT_DIVIDE_BY_ZERO 0xC0000094 整數除法的除數是0時引發該異常。
    EXCEPTION_INT_OVERFLOW 0xC0000095 整數操作的結果溢出時引發該異常。
    EXCEPTION_INVALID_DISPOSITION 0xC0000026 異常處理器返回一個無效的處理的時引發該異常。
    EXCEPTION_NONCONTINUABLE_EXCEPTION 0xC0000025 發生一個不可繼續執行的異常時,如果程序繼續執行,則會引發該異常。
    EXCEPTION_PRIV_INSTRUCTION 0xC0000096 程序企圖執行一條當前CPU模式不允許的指令時引發該異常。
    EXCEPTION_SINGLE_STEP 0x80000004 標志寄存器的TF位為1時,每執行一條指令就會引發該異常。主要用于單步調試。
    EXCEPTION_STACK_OVERFLOW 0xC00000FD 棧溢出時引發該異常。

    !analyze

    !analyze擴展顯示當前異常或bug check的信息。一般使用!analyze -v

    分析參考:https://msdn.microsoft.com/en-us/library/windows/hardware/ff560201(v=vs.85).aspx

    如下述為一個對NULL指針賦值生成的dump,自動生成dump可以參考16.windbg-.dump(轉儲文件)

    [cpp]?view plaincopy
  • 0:000>?!analyze?-v??
  • *******************************************************************************??
  • *?????????????????????????????????????????????????????????????????????????????*??
  • *????????????????????????Exception?Analysis???????????????????????????????????*??
  • *?????????????????????????????????????????????????????????????????????????????*??
  • *******************************************************************************??
  • ??
  • *************************************************************************??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Your?debugger?is?not?using?the?correct?symbols?????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????In?order?for?this?command?to?work?properly,?your?symbol?path???***??
  • ***????must?point?to?.pdb?files?that?have?full?type?information.??????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Certain?.pdb?files?(such?as?the?public?OS?symbols)?do?not??????***??
  • ***????contain?the?required?information.??Contact?the?group?that??????***??
  • ***????provided?you?with?these?symbols?if?you?need?this?command?to????***??
  • ***????work.??????????????????????????????????????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Type?referenced:?kernel32!pNlsUserInfo?????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • *************************************************************************??
  • *************************************************************************??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Your?debugger?is?not?using?the?correct?symbols?????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????In?order?for?this?command?to?work?properly,?your?symbol?path???***??
  • ***????must?point?to?.pdb?files?that?have?full?type?information.??????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Certain?.pdb?files?(such?as?the?public?OS?symbols)?do?not??????***??
  • ***????contain?the?required?information.??Contact?the?group?that??????***??
  • ***????provided?you?with?these?symbols?if?you?need?this?command?to????***??
  • ***????work.??????????????????????????????????????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • ***????Type?referenced:?kernel32!pNlsUserInfo?????????????????????????***??
  • ***???????????????????????????????????????????????????????????????????***??
  • *************************************************************************??
  • 首先被提示,這是沒有pdb文件 的

    [cpp]?view plaincopy
  • FAULTING_IP:???
  • test2+1002??
  • 01211002?8900????????????mov?????dword?ptr?[eax],eax??
  • FAULTING_IP:出現錯誤時的指令,這句明顯就是把eax賦到[eax]中

    [cpp]?view plaincopy
  • EXCEPTION_RECORD:??ffffffff?--?(.exr?0xffffffffffffffff)??
  • EXCEPTION_RECORD:崩潰時的異常記錄,可以使用.exr查看
    [cpp]?view plaincopy
  • ExceptionAddress:?01211002?(test2+0x00001002)??
  • ???ExceptionCode:?c0000005?(Access?violation)??
  • ??ExceptionFlags:?00000000??
  • NumberParameters:?2??
  • ???Parameter[0]:?00000001??
  • ???Parameter[1]:?00000000??
  • Attempt?to?write?to?address?00000000??
  • 這個就很詳細了,嘗試向0地址寫入,它其實就是調試中用到的結構體:可以直接通過MSDN查到它的定義

    [cpp]?view plaincopy
  • typedef?struct?_EXCEPTION_RECORD?{??
  • ????DWORD????ExceptionCode;??
  • ????DWORD?ExceptionFlags;??
  • ????struct?_EXCEPTION_RECORD?*ExceptionRecord;??
  • ????PVOID?ExceptionAddress;??
  • ????DWORD?NumberParameters;??
  • ????ULONG_PTR?ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];??
  • ????}?EXCEPTION_RECORD;??
  • 注意的是:上面的NumberParameter:2表示ExceptionInformation有兩個附加異常碼,1和0,對于多數異常來說,這些附加異常碼是沒有什么用的,MSDN:For most exception codes, the array elements are undefined.只有以下兩個被定義了

    當ExceptionCode為EXCEPTION_ACCESS_VIOLATION時,ExceptionInformation[0]=0表示線程試圖讀取不可訪問的數據ExceptionInformation[0]=1

    表示線程試圖寫入不可訪問的地址,很明顯,這里表示第二種,具體參考MSDN

    [cpp]?view plaincopy
  • DEFAULT_BUCKET_ID:??NULL_POINTER_READ??
  • DEFAULT_BUCKET_ID:表示了本次錯誤屬于哪種通用失敗

    [cpp]?view plaincopy
  • BUGCHECK_STR:??APPLICATION_FAULT_NULL_POINTER_READ_NULL_POINTER_WRITE??
  • The BUGCHECK_STR field shows the exception code. The name is a misnomer—the term?bug check?actually signifies a kernel-mode crash. In user-mode debugging, the exception code will be displayed—in this case, 0x80000003.

    [cpp]?view plaincopy
  • LAST_CONTROL_TRANSFER:??from?76b6337a?to?01211002??
  • 堆棧的最后調用:

    The LAST_CONTROL_TRANSFER field shows the last call on the stack. In this case, the code at address0x76b6337acalled a function at 0x1211002. You can use these addresses with the?ln (List Nearest Symbols)?command to determine what modules and functions these addresses reside in.

    [cpp]?view plaincopy
  • STACK_TEXT:????
  • WARNING:?Stack?unwind?information?not?available.?Following?frames?may?be?wrong.??
  • 0020fbb8?76b6337a?7efde000?0020fc04?77e092b2?test2+0x1002??
  • 0020fbc4?77e092b2?7efde000?596d1564?00000000?kernel32!BaseThreadInitThunk+0xe??
  • 0020fc04?77e09285?012112b6?7efde000?00000000?ntdll!__RtlUserThreadStart+0x70??
  • 0020fc1c?00000000?012112b6?7efde000?00000000?ntdll!_RtlUserThreadStart+0x1b??
  • 堆信息

    [cpp]?view plaincopy
  • STACK_COMMAND:??~0s;?.ecxr?;?kb??
  • 打印堆棧的命令

    [cpp]?view plaincopy
  • SYMBOL_NAME:??test2+1002??
  • 對應的符號名稱

    [cpp]?view plaincopy
  • IMAGE_NAME:??test2.exe??
  • 對應的模塊名稱




    3.符號文件簡介:

    符號文件對于調試程序是相當重要的,通常符號文件中包含以下內容

    全局變量的名字和地址

    函數名,地址及其原型

    幀指針優化數據

    局部變量的名字和地址

    源文件路徑以及每個符號的行號

    變量,結構等的類型信息

    新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

    以上是生活随笔為你收集整理的.lastevent、!analyze(dump分析、异常错误码查询)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。