當一個發布的.NET應用程序出現app crash,無法通過日志分析異常原因時,就需要通過分析DMP文件了,傳統方式是通過WinDbg來分析DMP文件,但是WinDbg用起來不是很方便,其實VS就是一個很好的DMP文件分析工具,這里我們通過一個簡單的控制台項目來分析一個DMP文件。
一、准備一個Demo項目
(1)在VS中新建一個控制台項目,取名Sobey.NullPointerDemo,並在Main方法中寫入以下代碼:
class Program { static void Main(string[] args) { Person p = null; // NullPointerException will happen in next line Console.WriteLine("{0}-{1}", p.ID, p.Name); Console.ReadKey(); } }
其中,Person類的定義如下:
public class Person { public int ID { get; set; } public string Name { get; set; } }
經實驗,.NET Framework版本號4.0及以上都可以。

(2)設置為Release,並編譯生成可執行文件
(3)運行.exe程序,出現crash現象,在任務管理器中生成DMP文件(在指定exe上右鍵菜單中選擇創建轉儲文件)


二、分析DMP文件
(1)到生成目錄下將生成的DMP文件拷貝到Release目錄下(和exe、pdb一個目錄下)
(2)雙擊DMP文件會直接進入VS,可以看到Summary信息

(3)可選步驟:設置符號路徑

(4)設置關聯源代碼路徑

(5)一切就緒,點擊“調試托管內存”

(6)查看具體異常原因,定位異常代碼位置


找到了具體異常位置之后,就可以着手改bug了。這是一個很簡單的空指針異常,但是一個簡單的空指針異常卻可以引起程序的崩潰,這也說明我們在編碼的時候要時刻注意代碼的質量,特別是魯棒性方面,尤其是需要對NULL指針做過濾。
最后,感謝Microsoft提供了這么優秀也這么“重量級"的IDE:

