1、掛異常鏈使用SetUnhandledExceptionFilter
2、在調試狀態下無效
3、發生異常的時候為了保留現場堆棧需要凍結進程內其他線程,所使用的操作越少越好。
4、開啟另外一個進程對異常進程進行MiniDump。
5、如果要分析崩潰地址是否在某個模塊,最好在分析進程里做?;蛘咴谀K加載時計算模塊區域以便在異常時快速定位。判斷崩潰是否和某個模塊相關,只能通過分析堆棧里的模塊來識別,使用StackWalk函數。StackWalk函數里所使用的context參數要使用異常參數里的ContextRecord,這樣能分析在崩潰的時候的堆棧,而不會受后面操作的影響。
6、如果希望自己是第一個被調用,可以在掛鏈之后用APIHook設置SetUnhandledExceptionFilter返回空。
7、在凍結線程的時候,不要打MessageBox,會導致當前線程因為其他線程掛起而阻死。
8、異常除了SetUnHandledExceptionFliter之外,還有AddVectoredExceptionHandler,相對于前者,后者的優點是能夠讓異常按照鏈式觸發,不會被中間節點斷開。但是AddVectoredExceptionHandler無法在2K下使用。。。