1、掛異常鏈?zhǔn)褂?span lang=EN-US>SetUnhandledExceptionFilter
2、在調(diào)試狀態(tài)下無效
3、發(fā)生異常的時候為了保留現(xiàn)場堆棧需要凍結(jié)進(jìn)程內(nèi)其他線程,所使用的操作越少越好。
4、開啟另外一個進(jìn)程對異常進(jìn)程進(jìn)行MiniDump。
5、如果要分析崩潰地址是否在某個模塊,最好在分析進(jìn)程里做。或者在模塊加載時計算模塊區(qū)域以便在異常時快速定位。判斷崩潰是否和某個模塊相關(guān),只能通過分析堆棧里的模塊來識別,使用StackWalk函數(shù)。StackWalk函數(shù)里所使用的context參數(shù)要使用異常參數(shù)里的ContextRecord,這樣能分析在崩潰的時候的堆棧,而不會受后面操作的影響。
6、如果希望自己是第一個被調(diào)用,可以在掛鏈之后用APIHook設(shè)置SetUnhandledExceptionFilter返回空。
7、在凍結(jié)線程的時候,不要打MessageBox,會導(dǎo)致當(dāng)前線程因為其他線程掛起而阻死。
8、異常除了SetUnHandledExceptionFliter之外,還有AddVectoredExceptionHandler,相對于前者,后者的優(yōu)點是能夠讓異常按照鏈?zhǔn)接|發(fā),不會被中間節(jié)點斷開。但是AddVectoredExceptionHandler無法在2K下使用。。。