异常处理流程小记

异常处理流程图


懒得折腾了,更新就挂,看图最靠谱;


已经写好Mermaid的语法,准备输出流程图了,发现Hexomermaid插件已是多年前的产物,不兼容最新的版本,无奈只能用draw.io画了张图;

最稳妥的方案是根据官方文档定义 mermaid 语法块,而不是使用 markdown 语法,例如:

1
2
3
4
5
6
7
{% mermaid graph TD %}
A[test] -->|Get money| B(Go shopping)
B --> C{Let me think}
C -->|One| D[Laptop]
C -->|Two| E[iPhone]
C -->|Three| F[fa:fa-car Car]
{% endmermaid %}
graph TD
A["系统发现产生了一个异常"] --> B{"程序是否正在被调试"}
B --> |"是,程序正在被调试"| C{"权限转给调试器,并判断调试器是否忽略了异常"}
C --> |"是,忽略了"| D{"程序是否安装 SEH"}
D --> |"是,安装了"| E{"SEH 是否解决异常"}
E --> |"是,解决了"| F["程序可以继续正常运行"]
B --> |"否,程序没有被调试"| D
C --> |"否,未忽略,但未能解决异常"| G["系统默认异常处理流程"]
D --> |"否,未安装"| G
E --> |"否,未解决"| G

图片镇楼:

图片镇楼

总结一下上图,共有 7 种流程:

1.系统发现异常 -> 是否调试状态 -> -> 交给调试器处理 -> 调试器是否忽略异常 -> -> 检查是否安装 SEH -> 已安装 -> 是否解决异常 -> 已解决 -> 程序继续运行

2.系统发现异常 -> 是否调试状态 -> -> 交给调试器处理 -> 调试器是否忽略异常 -> -> 检查是否安装 SEH -> 已安装 -> 是否解决异常 -> 未解决 -> 系统默认异常处理流程

3.系统发现异常 -> 是否调试状态 -> -> 交给调试器处理 -> 调试器是否忽略异常 -> -> 检查是否安装 SEH -> 未安装 -> 系统默认异常处理流程

4.系统发现异常 -> 是否调试状态 -> -> 交给调试器处理 -> 调试器是否忽略异常 -> -> 是否解决异常 -> -> 系统默认异常处理流程

5.系统发现异常 -> 是否调试状态 -> -> 检查是否安装 SEH -> 已安装 -> 是否解决异常 -> 已解决 -> 程序继续运行

6.系统发现异常 -> 是否调试状态 -> -> 检查是否安装 SEH -> 已安装 -> 是否解决异常 -> 未解决 -> 系统默认异常处理流程

7.系统发现异常 -> 是否调试状态 -> -> 检查是否安装 SEH -> 未安装 -> 系统默认异常处理流程