1、挂异常链使用SetUnhandledExceptionFilter
2、在调试状态下无效
3、发生异常的时候为了保留现场堆栈需要冻结进程内其他线程,所使用的操作越少越好。
4、开启另外一个进程对异常进程进行MiniDump。
5、如果要分析崩溃地址是否在某个模块,最好在分析进程里做。或者在模块加载时计算模块区域以便在异常时快速定位。判断崩溃是否和某个模块相关,只能通过分析堆栈里的模块来识别,使用StackWalk函数。StackWalk函数里所使用的context参数要使用异常参数里的ContextRecord,这样能分析在崩溃的时候的堆栈,而不会受后面操作的影响。
6、如果希望自己是第一个被调用,可以在挂链之后用APIHook设置SetUnhandledExceptionFilter返回空。
7、在冻结线程的时候,不要打MessageBox,会导致当前线程因为其他线程挂起而阻死。
8、异常除了SetUnHandledExceptionFliter之外,还有AddVectoredExceptionHandler,相对于前者,后者的优点是能够让异常按照链式触发,不会被中间节点断开。但是AddVectoredExceptionHandler无法在2K下使用。。。