Caché 变量大全 $ECODE 变量

2022-05-10 10:44:12 浏览数 (1)

Caché 变量大全 $ECODE 变量

包含当前错误代码字符串。

大纲

代码语言:javascript复制
$ECODE
$EC

描述

发生错误时,Caché会将$ECODE特殊变量设置为逗号分隔的字符串,其中包含与错误相对应的错误代码。例如,当引用未定义的全局变量时,Caché将$ECODE特殊变量设置为以下字符串:

代码语言:javascript复制
,M7,

$ECODE可以包含ISO 11756-1999标准M错误代码,格式为M#,其中#是整数。例如,M6和M7分别是“未定义的局部变量”和“未定义的全局变量”。 (M7为全局变量和进程专用全局发布。)

$ECODE还可以包含与Caché General System错误代码相同的错误代码(在终端提示符处返回到$ZERROR特殊变量的错误代码)。但是,$ECODE在这些错误代码前加上“Z”,并删除了尖括号。因此$ECODE错误ZSYNTAX是一个<SYNTAX>错误,ZILLEGAL VALUE是一个<ILLEGAL VALUE>错误,ZFUNCTION是一个<FUNCTION>错误。$ECODE不为提供它的那些错误代码保留任何额外的错误信息;因此ZPROTECT是一个<PROTECT>错误;附加信息组件保存在$ZERROR中,但不在$ECODE中。

如果在$ECODE已经包含以前的错误代码时出现错误,则在出现新错误时,现有的错误堆栈将被清除。新的错误堆栈将只包含显示当前错误发生时状态的条目。(这与早期的$ECODE行为不同,在早期的$ECODE行为中,旧的错误堆栈会一直存在,直到被显式清除。)

如果有多个错误代码,Caché会按照收到的顺序,在当前$ECODE值的末尾追加每个错误的代码。产生的$ECODE字符串中的每个错误都用逗号分隔,如下所示:

代码语言:javascript复制
,ZSTORE,M6,ZILLEGAL VALUE,ZPROTECT,

在上述情况下,最近的错误是<PROTECT>错误。

也可以显式清除或设置$ECODE。当终止当前进程时,总是清除$ECODE

清除 $ECODE

可以通过将$ECODE设置为空字符串("")来清除它,如下所示:

代码语言:javascript复制
SET $ECODE=""

$ECODE设置为空字符串会产生以下效果:

  • 它清除所有现有的$ECODE值。它对现有的$ZERROR值没有影响。
  • 它会为作业清除错误堆栈。这意味着对$STACK函数的后续调用返回当前的执行堆栈,而不是最后一个错误堆栈。
  • 它影响$ETRAP错误处理程序的错误处理控制流。

不能新建$ECODE特殊变量。尝试这样做会产生<SYNTAX>错误。

Setting $ECODE

可以通过将$ECODE设置为非空字符串的值来强制执行错误。将$ECODE设置为任何非null值将在执行ObjectScript例程期间强制执行解释器错误。在Caché将$ECODE设置指定的非空值之后,Caché采取以下步骤:

  1. 将指定的值写入$ECODE,覆盖以前的所有值。
  2. 生成<ECODETRAP>错误。(这将$ZERROR设置为值<ECODETRAP>)。
  3. 将控制权传递给已建立的任何错误处理程序。错误处理程序可以检查选择的$ECODE字符串值,并采取措施适当地处理条件。

$ECODE字符串溢出

如果$ECODE中累积字符串的长度超过512个字符,导致字符串溢出的错误代码将清除并替换$ECODE中的当前错误代码列表。在这种情况下,$ECODE中的错误列表是自最近一次字符串溢出以来的错误列表,从导致溢出的错误开始。

注意

创建自己的错误代码

$ECODE特殊变量的格式是由一个或多个错误代码组成的逗号包围的列表。以字母U开头的错误代码是为用户保留的。所有其他错误代码都保留给Caché。

用户定义的$ECODE值应该与Caché自动生成的值不同。为了确保这一点,请始终在错误文本前面加上字母U。另外,请记住用逗号来描述错误代码。例如:

代码语言:javascript复制
 SET $ECODE=",Upassword expired!,"

检查$ZERROR而不是$ECODE的Caché错误

错误处理程序应该检查$ZERROR,而不是$ECODE来查找最近的Caché错误。

0 人点赞