一、在使用WinDbg調試之前,我們先使用VS的調試功能 1、文件 -> 打開 -> 文件 -> 打開Dump文件 2、調試 -> 選項 -> 調試 -> 符號 -> 添加該應用的.pdb所在的文件夾 3、使用 僅限托管 進行調試 正常情況下會執行到拋出異常的位置,並且顯示異常詳情。 二、WinDb ...
一、在使用WinDbg調試之前,我們先使用VS的調試功能
1、文件 -> 打開 -> 文件 -> 打開Dump文件
2、調試 -> 選項 -> 調試 -> 符號 -> 添加該應用的.pdb所在的文件夾
3、使用 僅限托管 進行調試
正常情況下會執行到拋出異常的位置,並且顯示異常詳情。
二、WinDbg
下載路徑:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
舊版需要單獨配置符號路徑,某些版本符號路徑沒辦法全部下載下來,有一些遺漏導致功能用不了,推薦去上面的官網下載新版本
SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
![](https://img2022.cnblogs.com/blog/2919751/202208/2919751-20220814100403351-1391508518.png)
下麵的都是新版的操作,使用Open dump file打開dump文件
自動下載符號文件,下載完畢使用 !analyze -v分析(第一次使用還會下載分析使用的符號文件,之後就不會再下載了),FAULTING_SOURCE_CODE指出了源碼錯誤的位置
異常信息解讀
下麵分別介紹比較重要的關鍵欄位:
1、各個參數的詳解
FAULTING_IP :
即出錯的指令地址,指出發生錯誤時所執行的指令,這的IP值EIP
EXCEPTION_RECORD:
異常記錄的地址,即該地址是PEXCEPTION_RECORD類型,並且這裡給出了分析異常的命令(.exr -1)
ExceptionAdddress:
發生異常的地址
ExceptionCode:
異常所代碼的錯誤碼,這是因為非法訪問導致的
ExceptionFlag:
異常標誌(1,表示不可繼續的異常 0,表示可繼續的異常)
NumberParameters:
異常相關聯的參數,第一個參數是空指針,第二參數是結構體成員地址
FAULTING_THREAD:
發生錯誤的線程ID
CONTEXT:
是發生異常時的上下文地址,這裡給出的地址是0x002afb08 ,這個很重要。
FAULTING_SOURCE_CODE:
給出了執行異常時所對應的源代碼,>符號表明瞭異常語句。
STACK_COMMAND:
是堆棧相關的命令,獲取程式執行錯誤時堆棧調用情況,這給出了.cxr 0x2afb08 和 kb兩個命令, 這個也很重要。
2、STACK_TEXT棧文本
該欄位是棧文本信息,它反映了錯誤堆棧的調用情況,從中可以知道以下兩個信息:
函數執行順序為從MainWindow_Loaded函數到Run函數,執行Test11111函數時發生異常。
每一行中的每列地址分別為 ChildEBP地址、函數返回地址、函數前三個參數,共計五個。
例如:
00d92104參數1 00000000參數2 00000005 參數3 若參數少於三個,按照實際順序對號入座即可。