第六十四章 Caché 函数大全 $STACK 函数
文章目录
- 第六十四章 Caché 函数大全 $STACK 函数
- 大纲
- 参数
- 描述
- `$ECODE` 与 `$STACK`
- `$STACK`的单参数形式
- `$STACK`的两个参数形式
- 示例
- 注意
- 跨命名空间的例行调用
- `$STACK`计算多个参数的命令
- 出现``错误或内存不足的`$STACK`
第六十四章 Caché 函数大全 $STACK 函数
返回有关保存在流程调用堆栈中的活动上下文的信息。
大纲
$STACK(context_level,code_string)
$ST(context_level,code_string)
参数
- context_level 一个整数,指定要为其请求信息的上下文的从零开始的上下文级别编号。支持的值包括0,正整数和-1。
- code_string 可选-关键字字符串,指定所请求的上下文信息的类型。支持的值为
“PLACE”
,“MCODE”
和“ECODE”
描述
$STACK
函数根据$ECODE
特殊变量的值返回有关当前执行堆栈或当前错误堆栈的信息。 $STACK
最常用于在当前执行栈(也称为流程调用栈)上返回信息。
每次例程调用DO
命令,XECUTE
命令或用户定义的函数(但不是GOTO
命令)时,当前正在执行的例程的上下文都会保存在调用堆栈中,并且在新创建的例程上下文中开始执行称为例行程序。反过来,被调用的例程可以调用另一个例程,依此类推,导致将更多保存的上下文放置在调用堆栈中。
$STACK
函数返回有关保存在流程调用堆栈中的这些活动上下文的信息。 $STACK
还可以返回有关当前正在执行的上下文的信息。但是,在错误处理期间,$STACK
返回当应用程序中发生错误时所有可用上下文信息的快照。
可以使用$STACK
特殊变量来确定当前上下文级别。
$ECODE
与 $STACK
$STACK
返回的值取决于$ECODE
特殊变量。如果清除$ECODE
(设置为空字符串),则$STACK
返回当前执行堆栈。如果$ECODE
包含非空值,则$STACK
返回当前错误堆栈。
仅当$ECODE
特殊变量包含非空值时,错误堆栈上下文信息才可用。当发生错误或将$ECODE
显式设置为非空值时,可能会发生这种情况。在这种情况下,$STACK
返回有关错误堆栈上下文的信息,而不是有关指定上下文级别的活动堆栈上下文的信息。
当错误堆栈上下文信息不可用($ECODE =“”
)且使用$STACK
的两个参数形式指定当前上下文级别时,Caché返回有关当前正在执行的命令的信息。为了确保访问当前执行堆栈时的行为一致,请在调用$STACK
之前指定SET $ECODE =“”
。
$STACK
的单参数形式
$STACK(context_level)
返回一个字符串,该字符串指示如何建立指定的上下文级别。下表描述了可以返回的字符串值:
DO
通过DO
命令建立指定的上下文时返回。XECUTE
通过XECUTE
命令或BREAK
命令建立指定的上下文时返回。$$
通过用户定义的函数引用建立指定的上下文时返回。- An ECODE string 导致将指定上下文添加到错误堆栈的错误的错误代码值。例如,,
M26
。当在已经发生错误的上下文级别上发生错误时,上下文信息将放在下一个更高的错误堆栈级别;仅当指定的错误堆栈上下文级别的上下文信息已重定位信息时,才返回它。
当指定的上下文级别为零(0)或未定义时,$STACK
返回空字符串。
还可以使用$STACK
函数的单参数形式为上下文级别指定-1。在这种情况下,$STACK
返回可用信息的最大上下文级别,该信息在正常处理期间是当前正在执行的上下文的上下文级别编号。但是,在错误处理期间,$STACK(-1)
返回较大值:
- 过程错误堆栈的最大上下文级别
- 当前执行上下文的上下文级别号
$STACK
的两个参数形式
$STACK(context_level,code_string))
根据指定的code_string
返回有关指定上下文级别的信息。必须将code_string
指定为带引号的字符串。 code_string
值不区分大小写。例如,$STACK(1,"PLACE")
或 $STACK(1,"place")
。
以下描述了代码字符串以及在指定每个字符串时返回的信息。
PLACE
—返回在指定上下文级别执行的最后一个命令的条目引用和命令编号。对于DO
和用户定义的函数上下文,将以以下格式返回该值:“ label [+ offset] [^例程名称] + command”
。对于XECUTE
上下文,使用以下格式:“ @ + command”
。MCODE
—返回源例程行,XECUTE
字符串或$ETRAP
字符串,其中包含在指定上下文级别执行的最后一个命令。 (常规行的返回方式与$TEXT
函数返回的方式相同。)
注意:在错误处理期间,如果在构建或更新错误堆栈时内存不足,则可能没有足够的内存来存储源代码行。在这种情况下,MCODE
代码字符串的返回值为空字符串。但是,PLACE
代码字符串的返回值指示位置。
ECODE
—在指定上下文级别发生的任何错误的错误代码(仅在错误堆栈上下文中可用)。
当请求的信息在指定的上下文级别不可用时,$STACK
的两个参数形式将返回空字符串。
示例
下面的示例演示$STACK
可以返回的一些信息:
STAC ;SET $ECODE=""XECUTE "DO First"QUIT
First SET varSecond=$$Second()QUIT
Second() FOR loop=0:1:$STACK(-1) { WRITE !,"Context level:",loop,?25,"Context type: ",$STACK(loop)WRITE !,?5,"Current place: ",$STACK(loop,"PLACE")WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")WRITE ! }QUIT 1
DHC-APP>d STAC^PHA.TEST.CommandContext level:0 Context type:Current place: @ +1Current source: D STAC^PHA.TEST.CommandContext level:1 Context type: DOCurrent place: STAC+2^PHA.TEST.Command +1Current source: XECUTE "DO First"Context level:2 Context type: XECUTECurrent place: @ +1Current source: DO FirstContext level:3 Context type: DOCurrent place: First+1^PHA.TEST.Command +1Current source: SET varSecond=$$Second()Context level:4 Context type: $$Current place: Second+3^PHA.TEST.Command +4Current source: WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")
打印堆栈信息
FOR loop=0:1:$STACK(-1) { WRITE !,"Context level:",loop,?25,"Context type: ",$STACK(loop)WRITE !,?5,"Current place: ",$STACK(loop,"PLACE")WRITE !,?5,"Current source: ",$STACK(loop,"MCODE")WRITE ! }
注意
跨命名空间的例行调用
如果例程在其他名称空间中调用例程,则$STACK
返回名称空间名称作为例程名称的一部分。例如,如果USER
名称空间中的例程调用SAMPLES
名称空间中的例程,则$STACK
返回 ^|“ SAMPLES” |
例程名称。
$STACK
使用尖号(^
)字符作为分隔符。因此,如果隐含的名称空间名称包含插入符号(^
)字符,则Caché将此名称空间名称字符显示为@
字符。
$STACK
计算多个参数的命令
指定多参数命令时,命令计数包括命令关键字和除第一个以外的所有命令参数。考虑以下多参数命令:
TESTSET X=1,Y=Z
在Caché中,由于Y = Z
参数被视为单独的命令,因此$STACK
语句$STACK(1,“ PLACE”)
返回"TEST^TEST +2"
。
出现<STORE>
错误或内存不足的$STACK
在出现<STORE>
错误或在内存不足的情况下,可能无法通过应用$STACK
的两个参数形式正常获取信息。
第六十四章 Caché 函数大全 $STACK 函数相关推荐
- 第八十四章 Caché 函数大全 $ZDATEH 函数
文章目录 第八十四章 Caché 函数大全 $ZDATEH 函数 大纲 参数 描述 简单的$ZDATEH格式 可自定义的$ZDATEH格式 参数 date dformat dformat Defaul ...
- 第七十四章 Caché 函数大全 $WREVERSE 函数
文章目录 第七十四章 Caché 函数大全 $WREVERSE 函数 大纲 参数 描述 示例 第七十四章 Caché 函数大全 $WREVERSE 函数 以相反的顺序返回字符串中的字符,识别出代理对. ...
- 第六十九章 Caché 函数大全 $WCHAR 函数
文章目录 第六十九章 Caché 函数大全 $WCHAR 函数 大纲 参数 描述 第六十九章 Caché 函数大全 $WCHAR 函数 返回与识别代理项对的数字代码对应的字符. 大纲 $WCHAR(e ...
- 第六十四章 SQL函数 INSTR
文章目录 第六十四章 SQL函数 INSTR 大纲 参数 描述 INSTR, CHARINDEX, POSITION和$FIND 示例 第六十四章 SQL函数 INSTR 返回子字符串在字符串中的位置 ...
- 【正点原子Linux连载】第六十四章 Linux 多点电容触摸屏实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 第二十四章 Caché 变量大全 $ZA 变量
文章目录 第二十四章 Caché 变量大全 $ZA 变量 大纲 描述 注意 `$ZA`,带终端I / O 带磁带I / O的$ZA 第二十四章 Caché 变量大全 $ZA 变量 包含当前设备上最后一 ...
- 疯狂的程序员-第六十四章
疯狂的程序员?说实话,要是这话从周总陈懂或者其他人嘴里说出来,绝影肯定不信,但现在这个人是BOSS Liu,BOSS Liu又一向不爱开严肃的玩笑,这人又得到他如此高度的评价,肯定大有来头. 于是绝影 ...
- 第十四章 疯狂Caché 事务处理
文章目录 第十四章 Caché 事务处理 管理应用程序内的事务处理 事务命令 使用在事务中使用锁 在事务中使用`$INCREMENT`和`$SEQUENCE` 应用程序内的事务回滚 发出SQL或Cac ...
- 第十九章 Caché 函数大全 $INCREMENT 函数
文章目录 第十九章 Caché 函数大全 $INCREMENT 函数 大纲 参数 描述 参数 variable num INCREMENT或INCREMENT或INCREMENT或SEQUENCE $ ...
最新文章
- Android Studio编译NDK工程时,报ndk-build.cmd'' finished with non-zero exit value 2错误
- 资源利用率监控与存储卷(pv/pvc)
- 飞鸽传书从微软官网上了解到微软正在推动虚拟化
- 27.产品经理需要具备的数据分析能力
- scala apply是什么
- JSP的执行过程及生命周期
- 冒泡排序面向对象java_冒泡排序
- zabbix客户端部署
- 如何在java对象里访问Spring中已加载的property内容
- 关于百度富文本编辑器UEditor中ctrl+enter键发送消息的解决方案
- multisim红绿灯元器件在哪里_实验一:Multisim交通灯仿真.ppt
- 今年11月初阿里巴巴社招面试经历分享,Java工程师方向已拿offer【附学习方法】
- 2021年全球手机市场,三星和华为都输了,其他手机企业赢了
- 手机居然可以变成电脑的无线麦克风?快来瞧瞧
- matlab 精品课程,同济大学经济与管理学院精品课程
- 英语语音篇 - 特殊发音记录
- oracle buys,Aconex - Logiciel de contrôle des projets de construction | Oracle France
- 笨方法学习Python 习题19 函数和变量 ---学习记录
- 视频教程-微信小程序项目实战之我画你猜视频课程-微信开发
- 注册中心在蚂蚁集团的蜕变之路