ErrorContext 类
ErrorContext对象捕获运行时关于运行时错误的所有信息:其标识(Number、Description、Source)、帮助引用(HelpFile、HelpContext)、引发时的操作系统错误代码(LastDLLError)、错误处理机制的State以及故障时刻的Callstack快照。它是twinBASIC对较简单的Err对象的结构化对应。
错误标识属性(Number、Description、Source、HelpFile、HelpContext、LastDLLError)在此处的含义与Err对象上相同——参见ErrObject模块中各项的讨论。State和Callstack是ErrorContext独有的,反映了旧版Err对象上没有对应功能的结构化错误处理机制。
成员
Callstack
返回错误引发时调用堆栈的快照,类型为ErrorCallstack。
语法:object.Callstack
- object
- 必需 求值为ErrorContext对象的对象表达式。
快照按最外层在前列出每个活动过程;最内层帧是引发错误的过程。此集合为只读——参见ErrorCallstack了解如何迭代。
Description
返回错误的简短文本描述,类型为String。只读。
语法:object.Description
- object
- 必需 求值为ErrorContext对象的对象表达式。
对于运行时定义的错误,这是运行时将在未处理错误对话框中显示的消息。对于用户定义的错误,它是传递给Err.Raise的字符串。
HelpContext
返回与错误关联的帮助文件上下文ID,类型为Long。只读。
语法:object.HelpContext
- object
- 必需 求值为ErrorContext对象的对象表达式。
当HelpFile指定帮助文件时,HelpContext标识该文件中记录错误的主题。如果没有关联的帮助上下文则为0。
HelpFile
返回与错误关联的帮助文件路径,类型为String。只读。
语法:object.HelpFile
- object
- 必需 求值为ErrorContext对象的对象表达式。
如果没有关联的帮助文件则为零长度字符串。
LastDLLError
返回Windows DLL调用记录的最后一个操作系统错误代码,类型为Long。只读。
语法:object.LastDLLError
- object
- 必需 求值为ErrorContext对象的对象表达式。
twinBASIC的错误捕获不会捕获Declare声明的Windows API调用内部的失败——这些调用通过返回值报告失败,调用代码必须检查此属性来了解底层Win32错误。此值仅在Windows上有意义。
Number
返回运行时错误编号,类型为Long。只读。
语法:object.Number
- object
- 必需 求值为ErrorContext对象的对象表达式。
内置错误使用标准VBA错误代码(例如,9表示"下标越范围",91表示"对象变量或With块变量未设置")。使用Err.Raise引发的用户定义错误通常将vbObjectError偏移量加到每个应用程序的小代码上。
Source
返回引发错误的对象或应用程序名称,类型为String。只读。
语法:object.Source
- object
- 必需 求值为ErrorContext对象的对象表达式。
对于在twinBASIC项目内部引发的错误,这是项目名称;对于由Automation服务器引发的错误,这是应用程序的编程标识符。用户代码在调用Err.Raise时可提供任意字符串。
State
返回或设置标识当前活动错误处理构造的值,类型为OnErrorStatus值。
语法:object.State [ = value ]
- object
- 必需 求值为ErrorContext对象的对象表达式。
运行时在控制流经过错误处理器、Try/Catch/Finally块以及各种传播路径时更新State。读取此属性可告诉诊断代码它是从哪个构造调用的。对其赋值会覆盖运行时对下一步操作的决定——这是一种刻意设计的高级操作,主要用于诊断工具和管理自身错误流的库。
OnErrorStatus枚举值为:
- OnErrorGoto0(&H1)
- 当前生效On Error GoTo 0——未安装处理器。
- OnErrorResumeNext(&H2)
- 当前生效On Error Resume Next。
- OnErrorGotoLabel(&H3)
- 当前生效On Error GoTo label。
- OnErrorEnd(&H4)
- 因未处理错误导致执行终止。
- OnErrorDebug(&H5)
- 运行时即将中断进入调试器。
- CalledByLocalHandler(&H6)
- 当前执行的代码由本地错误处理器调用。
- OnErrorRetry(&H7)
- 正在重试失败语句(Resume的结构化等价)。
- OnErrorPropagate(&H8)
- 未处理的错误正在沿调用堆栈向上传播。
- OnErrorExitProcedure(&H9)
- 错误正在强制当前过程退出。
- OnErrorCatch(&Ha)
- 控制在匹配特定错误的Catch块内。
- OnErrorCatchAll(&Hb)
- 控制在通用的"捕获全部"块内。
- OnErrorInsideCatch(&Hc)
- 控制嵌套在Catch块内(处理器内部又引发了错误)。
- OnErrorInsideCatchAll(&Hd)
- 控制嵌套在"捕获全部"块内。
- OnErrorInsideFinally(&He)
- 控制在Finally块内。
- OnErrorPropagateCatch(&Hf)
- 错误正在从Catch块传播出去。
- OnErrorPropagateCatchAll(&H10)
- 错误正在从"捕获全部"块传播出去。