工具 這裡用到兩個工具分別為Procdump+Windbg Procdump:ProcDump是一個命令行實用工具,主要目的是監視應用程式,以便在管理員或開發人員可用於確定峰值的原因期間監視 CPU 峰值和生成故障轉儲。 ProcDump 還包括使用視窗掛起 (使用相同的視窗掛起定義,Windows ...
- 工具
這裡用到兩個工具分別為Procdump+Windbg
Procdump:ProcDump是一個命令行實用工具,主要目的是監視應用程式,以便在管理員或開發人員可用於確定峰值的原因期間監視 CPU 峰值和生成故障轉儲。 ProcDump 還包括使用視窗掛起 (使用相同的視窗掛起定義,Windows和任務管理器使用) 、未經處理的異常監視,並可以根據系統性能計數器的值生成轉儲。 它還可用作可在其他腳本中嵌入的常規進程轉儲實用工具。(最主要的是輕量、跨平臺)微軟介紹地址
Windbg:Windbg是在windows平臺下,強大的用戶態和內核態調試工具。相比較於Visual Studio,它是一個輕量級的調試工具,所謂輕量級指的是它的安裝文件大小較小,但是其調試功能,卻比VS更為強大。它的另外一個用途是可以用來分析dump數據。 - 準備測試程式
之所以這樣寫是為了讓程式崩潰掉,利於我們抓取Dump文件
- [class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var jj = Console.ReadLine();
Console.WriteLine(jj);
new TestMain().main();
Console.ReadLine();
}
}
class TestMain {
public void main() {
Timer timer = new Timer(new TimerCallback(m =>
{
var r = 10 / Convert.ToInt32("0");
}), null, 60000, 5000);
}
} ]
- 抓取dump
這裡我們利用Procdump工具抓取進程崩潰時的dump,首先下載好Procdump工具。
下載完成後,進入工具目錄在目錄中打開cmd命令行工具定位到當前目錄
在命令行中輸入procdump -e -ma -w Bcode_ConsoleApp.exe監控exe應用 這裡也可以輸入程式的PID
等待應用執行,下麵運行我們的測試程式
接下來等程式崩潰
OK這裡我們就完成了一大步,我們成功抓取到dump文件,dump文件就在Procdump工具目錄下
- 解析dump查找問題原因
這裡我們利用微軟的Windbg強大工具進行解析處理
這裡我們成功打開了dump文件並查找到4個線程
在【54b0】線程中我們看到一個錯誤,然後查看一下錯誤的具體信息
從錯誤信息中我們可以看到堆棧信息,找到堆棧信息對照我們的程式代碼就可以定位並解決問題了