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