(delphi11最新学习资料) Object Pascal 学习笔记---第9章第4节(全局异常处理)

9.4 全局异常处理

​ 如果事件处理器引发的异常停止了标准的执行流程,那么如果找不到异常处理器,是否也会终止程序呢?这确实是控制台应用程序或其他特殊用途代码结构的情况,而大多数可视化应用程序(包括基于 VCL 或 FireMonkey 库的应用程序)都有一个全局消息处理循环,它将每次执行都包裹在一个 try-except 块中,这样如果在事件处理器中引发异常,就会被捕获。

注解:请注意,如果在激活消息循环之前启动代码中出现异常,异常通常不会被库捕获,程序将以错误结束。通过在主程序中添加自定义 try-except 块,可以部分缓解这种行为。即使有这种程度的保护,在主程序执行之前和进入自定义 try-except 块之前,仍会运行库初始化代码,因此在此之前仍有可能发生未处理的异常。

​ 在执行过程中出现异常的一般情况下,会发生什么取决于库,但一般都有一种编程方式,可以用全局处理器拦截这些异常,或者有一种显示错误信息的方式。虽然某些细节有所不同,但 VCL 和 FireMonkey 都是如此。

​ 在前面的演示中,你看到了当异常发生时显示的简单错误信息。如果想改变这种行为,可以处理全局应用程序对象的 OnException 事件。虽然这一操作更多地与应用程序的可视化库和事件处理相关,但它也与异常处理相关,因此值得在此介绍一下。

​ 我将前面的示例称为 ErrorLog,并在主窗体中添加了一个新方法:

pascal 复制代码
public
  procedure LogException(Sender: TObject; E: Exception);

​ 在 OnCreate 事件处理器中,我添加了将一个方法挂钩到全局 OnException 事件的代码,之后,我编写了全局处理器的实际代码:

pascal 复制代码
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := LogException;
end;

procedure TForm1.LogException(Sender: TObject; E: Exception);
begin
  Show('Exception ' + E.Message);
end;

注解:下一章将详细介绍如何将一个方法指针关联一个事件(如上所述)。

​ 有了全局异常处理器中的新方法,程序就能将错误信息写入输出端,而不会通过错误对话框停止应用程序。

相关推荐
前进的李工2 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
正在走向自律3 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
蒸蒸yyyyzwd4 小时前
后端学习笔记三个知识
笔记·八股
CCIE-Yasuo5 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga5 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
Zhao-Jichao6 小时前
AI Prompting for Everyone 课程笔记 - P19 数据分析 Data Analysis
人工智能·笔记·数据分析
li星野6 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光7 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
ACP广源盛139246256737 小时前
选型笔记:Type‑C 扩展坞方案评估|DP1.2 转 HDMI2.0 桥接芯片 GSV2201D@ACP
笔记·硬件架构·硬件工程·视频·国产芯片
WEI_YANG_JU7 小时前
初中数学教学中合作学习的研究与实践
学习