1. 程式人生 > >使用VS2012除錯Dump檔案

使用VS2012除錯Dump檔案

前一節我講了怎麼設定C++崩潰時生成Dump檔案 , 點選 傳送門 , 這一節我講講怎麼使用 VS2012 除錯生成的 Dump 檔案 , 甚至可以精確到出錯的那一行程式碼上面 ;

1. 生成 Dump 檔案

我在主函式寫了如下崩潰程式碼 :

int main()
{
    // 加入崩潰dump檔案功能
    SetUnhandledExceptionFilter(ExceptionFilter);
    // 使程式崩潰產生 Dump 檔案
    int *p = NULL;
    *p=1;
}

雙擊執行主程式 , 產生了 Dump 檔案 DumpDemo_v1.0-20170605-091215.dmp

, 如下圖所示 :

FileList

2. 開啟 Dump 檔案

雙擊開啟生成的 Dump 檔案 , 會預設用 VS2012 開啟並自動建立一個解決方案 , Dump 摘要資訊如下 :

DumpInfo

一定要確保 程序名稱 對應的程式路徑在本地存在 , 同時確保最初生成程式的對應 .pdb 符號檔案也在當前目錄 ;

有時從客戶那裡反饋回來的 Dump 檔案程式路徑和本地的不一致 , 需要將程式拷貝到 Dump 資訊裡面的路徑中去 ;

3. 設定 Symbols 路徑

除錯檔案需要對應的符號檔案 , 我們需要設定符號檔案對應的路徑 :

在 Dump 資訊摘要右上角 , 點選 設定符號路徑 :

SetSymbols

推薦使用 Microsoft 符號伺服器

, 但第一次線上下載會有點慢 ; 當然也可以自己下載符號集檔案到某個路徑 , 再講符號路徑指向該路徑 :

SymbolsPath

4. 設定原始碼路徑

在左側的解決方案處右鍵點選 屬性 -> 除錯原始檔 , 將原始碼的路徑新增進來 , 注意一定是解決方案所在的路徑 :

CodePath

5. 除錯 Dump 檔案

準備工作已就緒 , 現在在 Dump 檔案摘要右上角點選 使用 僅限本機 進行除錯 :

BeginDebug

如果提示 無法找到除錯資訊 , 或者除錯資訊不匹配 , 無法查詢或開啟 PDB 檔案 , 說明沒有將最初生成程式的對應 .pdb 符號檔案放在除錯程式所在的目錄 , 或者 .pdb 符號檔案與當前的程式版本不匹配 ;

程式會重現當時崩潰前的呼叫堆疊 , 如下圖所示 :

DebugInfo

可以看出程式已經定位到了崩潰前的那一行程式碼 , 非常方便排查 ;

個人網站: Github , 歡迎點選給星