使用VS2012除錯Dump檔案
阿新 • • 發佈:2019-01-07
前一節我講了怎麼設定C++崩潰時生成Dump檔案 , 點選 傳送門 , 這一節我講講怎麼使用 VS2012 除錯生成的 Dump 檔案 , 甚至可以精確到出錯的那一行程式碼上面 ;
1. 生成 Dump 檔案
我在主函式寫了如下崩潰程式碼 :
int main()
{
// 加入崩潰dump檔案功能
SetUnhandledExceptionFilter(ExceptionFilter);
// 使程式崩潰產生 Dump 檔案
int *p = NULL;
*p=1;
}
雙擊執行主程式 , 產生了 Dump 檔案 DumpDemo_v1.0-20170605-091215.dmp
2. 開啟 Dump 檔案
雙擊開啟生成的 Dump 檔案 , 會預設用 VS2012 開啟並自動建立一個解決方案 , Dump 摘要資訊如下 :
一定要確保 程序名稱
對應的程式路徑在本地存在 , 同時確保最初生成程式的對應 .pdb
符號檔案也在當前目錄 ;
有時從客戶那裡反饋回來的 Dump 檔案程式路徑和本地的不一致 , 需要將程式拷貝到 Dump 資訊裡面的路徑中去 ;
3. 設定 Symbols 路徑
除錯檔案需要對應的符號檔案 , 我們需要設定符號檔案對應的路徑 :
在 Dump 資訊摘要右上角 , 點選 設定符號路徑
:
推薦使用 Microsoft 符號伺服器
4. 設定原始碼路徑
在左側的解決方案處右鍵點選 屬性
-> 除錯原始檔
, 將原始碼的路徑新增進來 , 注意一定是解決方案所在的路徑 :
5. 除錯 Dump 檔案
準備工作已就緒 , 現在在 Dump 檔案摘要右上角點選 使用 僅限本機 進行除錯
:
如果提示
無法找到除錯資訊 , 或者除錯資訊不匹配 , 無法查詢或開啟 PDB 檔案
, 說明沒有將最初生成程式的對應.pdb
符號檔案放在除錯程式所在的目錄 , 或者.pdb
符號檔案與當前的程式版本不匹配 ;
程式會重現當時崩潰前的呼叫堆疊 , 如下圖所示 :
可以看出程式已經定位到了崩潰前的那一行程式碼 , 非常方便排查 ;
個人網站: Github , 歡迎點選給星