异常处理——异常处理简介之UnhandledExceptionFilter(1)

来源:互联网 发布:edg那个知恩是谁 编辑:程序博客网 时间:2024/06/06 07:32

1.异常处理流程

在软件开发过程中,总会遇到许许多多的bug。如果在开发过程中,出现bug异常,未处理,就会导致程序崩溃。崩溃了,系统会先自动先去处理,一般是UnhandledExceptionFilter这个函数在调试。

异常处理流程

//未处理异常示例*(int *)0 = 1 ; //语句错误,未处理

一些处理异常的返回值
EXCEPTION_CONTINUE_SEARCH(0)(作为返回值,表示处理失败,系统继续找其他异常处理器)
EXCEPTION_CONTINUE_EXECUTION(1)(作为返回值,表示异常已处理,恢复中断的代码)
EXCEPTION_EXECUTE_HANDLER(-1)(作为返回值,一般表示退出进程或者线程)

未处理异常分类
内核态的未处理异常(发生在驱动程序等内核态模块中的未处理异常)
用户态的未处理异常(发生在应用程序中的未处理异常)
Windows对未处理异常的机制
对于内核态的未处理异常:系统内核调试器调试,失败后蓝屏
对于用户态的未处理异常:应用程序代码执行代码内异常处理,如果代码没有异常处理,则使用windows默认异常处理器处理(默认为SEH异常处理器)

异常处理器
jit调试

2.常用的错误处理方法:

1.返回值判断。 返回正确和错误,缺点,返回值有可能被忽略
2.全局状态标志判断。设定正确和错误标志树形。缺点:多个线程为全局变量赋值,导致混乱
3.setjmp()/longjmp(),类似goto语句
4.try/throw/catch,异常处理

结论

只要在顶层异常函数设置我们自己的函数,就可以用自己的异常处理方式来处理。就像QQ奔溃弹出来的说他已经奔溃,让你发送错误报告这种框架。

0 0