首先讓我為大家科普“崩了”是什么樣子
01系統崩潰
系統的崩潰主要發生在:程序未能注意到有東西出錯、并繼續運行,直到出現更嚴重的情況。
例如試圖“除以零”,進而導致程序被迫中止。
崩潰很可能在出現誘因后立刻發生,或等待很久后才發生。
也有可能是錯誤信息導致的,但這類信息通常是由操作系統或應用程序框架顯示,而非由程序代碼本身顯示。
下圖是一個典型的崩潰對話框:

(應用 Sample.exe 崩潰后 windows 顯示的錯誤信息)
這個錯誤信息是由 Windows 錯誤報告組件 WerFault.exe 顯示的。
為了確認這一點,可以將 Procexp 的十字準星圖標拖拽到錯誤信息上,并查看擁有該窗口的進程。
如下圖顯示了 Procexp 所展示的,故障的 Sample.exe 和 WerFault.exe 之間的關系。
本例中,Kernelbase.dll內的默認進程中崩潰處理代碼使用 Sample.exe的PID作為一個命令行參數啟動了 WerFault.exe(在Windows 8.1 中,崩潰處理代碼還可對崩潰的進程創建不可執行的快照)。

(崩潰對話框是由 WerFault.exe 進程顯示的)
02崩潰觸發
大部分崩潰均由無法處理的進程異常觸發如果程序執行過程中遇到反常、不尋常,或非法的、無法由程序直接處理的情況,就會發生異常。
隨后將拋出有關具體狀況以及遇到該狀況的上下文信息,并將控制權轉交給上一層異常處理程序。
異常處理程序可以修復所遇到的狀況,并將控制權返回給出現異常的位置;或立刻返回給出現異常時包含的區塊;或由系統繼續搜索能處理異常的處理程序。
如果找不到任何處理程序,則無法處理的異常會導致程序退出。
03硬件異常和軟件異常
硬件異常:
CPU 檢測到當前 CPU 指令違反某個規則而無法完成。
最常見的部分例子包括:
1. 除以零;
2. 在 CPU 未處于特權模式(即 Ring 0) 的情況下執行特權指令;
3. 執行未定義的 Opcode,如果 CPU 的指令指針設置為錯誤的內存地址就會發生這 種情況;
4. 訪問未提交的虛擬內存;
5. 寫入只讀內存;執行被標記為不可執行(NX)的內存;以及棧溢出。
軟件異常:
與之相對的,如果程序檢測到無法由自己直接處理的不尋常或錯誤狀況,則此時會特意拋出軟件異常。
04定義專用的異常類
C++和C#等語言的標準庫定義和使用的類(Class)可以將不同類型異常的各種信息封裝在一起,還使得程序員可以為自己的應用程序定義專用的異常類。
例如.NET RegistryKey 類包含有關 Windows 注冊表的訪問操作,如果用戶無權執行所請求的操縱,則將會拋出 SecurityException。
程序員有責任了解自己的程序何時會拋出異常,并編寫能妥善處理異常的代碼,確保自己的程序不會崩潰。
如果在拋出異常時,進程附加了 ProcDump 這樣的調試器,那么調試器將先于其他所有異常處理程序獲得通知。
這個通知也叫做第一輪異常(First-chance exception)。由于大部分第一輪異常最終都將由程序來處理,因此通常可忽略此類異常。
如果沒有異常處理程序可以處理這樣的異常,那么調試器會再次收到 第二輪異常(Second-chance exception)的通知,這類異常也叫做未處理的異常(Unhandled exception)。
05區別排查
第一輪和第二輪異常的區別對排錯工作很重要。
例如應用程序可能由于開發者未能提供相應的異常處理 代碼導致在遇到未處理的異常后崩潰。
而附加的調試器可能根本沒機會看到第二輪異常,因為應用程序 構建時所選擇的目標平臺已經在應用的外圍提供了異常處理機制,在異常變為“未處理”狀態并傳遞給 調試器之前就已接手了這個異常。
下圖 顯示了一個.NET 窗體應用由于未處理的異常而顯示的崩潰對話框。
該應用程序的開發者并未提供異常處理程序,但.NET Framework 庫代碼提供了,并顯示了下圖 中 所示的對話框。
與之前的崩潰信息不同,這則錯誤信息是由出現異常的進程顯示的。

(NET Framework捕獲了一個窗體應用中出現的未處理異常)
可以運行 Procmon 直到錯誤出現,停止追蹤,篩選掉不相關的事件,然后在追蹤記錄中從后向前查看,找到能代表問題根源的信息。
如果崩潰發生在啟動或登錄過程中,可能意味著某個自動運行的組件嫌疑最大。
此時可以使用 Autoruns 找出可能性最大的組件,并將其暫時或永久禁用;Autoruns 還可以幫我們找出需要更新的組件。
ProcDump 在崩潰故障排錯中非常有用,該工具可在第一輪或第二輪異常時,以及在被很多其他類型事件 觸發后捕獲用戶模式的轉儲。該工具還可將獲取的信息實時發送給 Procmon,這樣就可以將異常信息與發 生時的注冊表、文件、網絡,以及進程事件結合在一起查看。
有人戲稱,天天宅在家,想知道沙雕網友們最愛干的事是啥?
看熱搜就知道,愛它就要毀了它,愛誰,誰就崩!
其實不全然,看看釘釘~

那么問題來了,釘釘憑什么在一眾平臺中脫穎而出、屹立不倒?

原來,釘釘背后的阿里云提前預防了由于人流過多而造成的崩。
假設群眾們是磨刀霍霍向平臺的服務器殺手,那么程序員們就是妙手回春的白衣天使~
衷心感謝各位程序員日以繼夜的辛苦碼作,讓我們在家里也能暢享網絡!
還想了解更多服務器的使用訣竅嗎?這本《Windows Sysinternals實戰指南》推薦給大家,本書匯集了微軟CTO多年實戰經驗的總結,全面透徹剖析了Windows系統工具Sysinternals套件的使用方法以及難點、疑點。
無論是對廣大Windows系統管理員,還是普通用戶,如果掌握了本書中的技巧,就能事半功倍的解決日常電腦故障和出現的各種問題。