Caché 变量大全 $ECODE 变量
包含当前错误代码字符串。
大纲
代码语言:javascript复制$ECODE
$EC
描述
发生错误时,Caché会将$ECODE
特殊变量设置为逗号分隔的字符串,其中包含与错误相对应的错误代码。例如,当引用未定义的全局变量时,Caché将$ECODE
特殊变量设置为以下字符串:
,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
字符串中的每个错误都用逗号分隔,如下所示:
,ZSTORE,M6,ZILLEGAL VALUE,ZPROTECT,
在上述情况下,最近的错误是<PROTECT>
错误。
也可以显式清除或设置$ECODE
。当终止当前进程时,总是清除$ECODE
。
清除 $ECODE
可以通过将$ECODE
设置为空字符串("")
来清除它,如下所示:
SET $ECODE=""
将$ECODE
设置为空字符串会产生以下效果:
- 它清除所有现有的
$ECODE
值。它对现有的$ZERROR
值没有影响。 - 它会为作业清除错误堆栈。这意味着对
$STACK
函数的后续调用返回当前的执行堆栈,而不是最后一个错误堆栈。 - 它影响
$ETRAP
错误处理程序的错误处理控制流。
不能新建$ECODE
特殊变量。尝试这样做会产生<SYNTAX>
错误。
Setting $ECODE
可以通过将$ECODE
设置为非空字符串的值来强制执行错误。将$ECODE
设置为任何非null值将在执行ObjectScript例程期间强制执行解释器错误。在Caché将$ECODE
设置指定的非空值之后,Caché采取以下步骤:
- 将指定的值写入
$ECODE
,覆盖以前的所有值。 - 生成
<ECODETRAP>
错误。(这将$ZERROR
设置为值<ECODETRAP>
)。 - 将控制权传递给已建立的任何错误处理程序。错误处理程序可以检查选择的
$ECODE
字符串值,并采取措施适当地处理条件。
$ECODE
字符串溢出
如果$ECODE
中累积字符串的长度超过512个字符,导致字符串溢出的错误代码将清除并替换$ECODE
中的当前错误代码列表。在这种情况下,$ECODE
中的错误列表是自最近一次字符串溢出以来的错误列表,从导致溢出的错误开始。
注意
创建自己的错误代码
$ECODE
特殊变量的格式是由一个或多个错误代码组成的逗号包围的列表。以字母U开头的错误代码是为用户保留的。所有其他错误代码都保留给Caché。
用户定义的$ECODE
值应该与Caché自动生成的值不同。为了确保这一点,请始终在错误文本前面加上字母U
。另外,请记住用逗号来描述错误代码。例如:
SET $ECODE=",Upassword expired!,"
检查$ZERROR
而不是$ECODE
的Caché错误
错误处理程序应该检查$ZERROR
,而不是$ECODE
来查找最近的Caché错误。