第四十一章 Caché 命令大全 ZBREAK 命令

2020-08-10  本文已影响0人  Cache技术分享

第四十一章 Caché 命令大全 ZBREAK 命令

设置断点或观察点。

大纲

ZBREAK:pc
ZB:pc

ZBREAK:pc location:action:condition:execute_code
ZB:pc location:action:condition:execute_code

ZBREAK:pc /command:option
ZB:pc /command:option

参数

描述

ZBREAK在特定代码行设置断点,并在特定局部变量上设置观察点,以允许您中断程序执行以进行调试。一旦建立,断点或监视点将在当前进程的持续时间内持续存在,或者直到显式删除或清除为止。断点和观察点在命名空间之间是持久的。每个进程最多可以建立20个断点和20个观察点。这些最大值包括启用和禁用的断点和观察点。尝试设置20个以上的断点或监视点会导致<command>错误。

所需权限

要在运行代码时使用ZBREAK语句,必须将用户分配给为%Development资源提供U(使用)权限的角色(如%Developer%Manager)。可以通过SQL GRANT语句或使用Management Portal System Administration、Security、Users选项将用户分配给角色。选择用户名以编辑其定义,然后选择角色选项卡将该用户分配给角色。

要使用ZBREAK,用户必须对代码所在的数据库具有写访问权限。否则,将禁用单步执行、断点和监视点。例如,对%SYS(CACHESYS)或CACHELIB数据库没有写访问权限的用户将无法调试该数据库中的例程。Caché在进入其中一个数据库中的例程时禁用调试,并且仅在例程退出时恢复调试。这样做的效果是,该例程调用的任何其他代码也将禁用调试,而不管用户是否对该代码的数据库具有写入访问权限。

列出断点

无参数ZBREAK命令列出当前断点和观察点。它列出了启用和禁用的断点和观察点。

列出本地变量值

可以在同一行上的任何ZBREAK命令后面加上一个无参数的WRITE命令。(请注意,无参数ZBREAK后面必须跟两个空格。)无参数WRITE 在遇到ZBREAK行时列出所有局部变量的值;而不是在它生效时列出。

禁用/启用所有现有断点/监视点

ZBREAK命令后面可以跟一个没有位置规范的符号。减号(-)参数禁用所有当前断点和观察点。加号(+)参数将重新启用所有以前禁用的断点和观察点。支持以下不带位置命令的ZBREAK

代码 描述
ZBREAK - 禁用所有现有断点和观察点。
ZBREAK + 重新启用所有以前禁用的断点和观察点。不能重新启用已删除的断点/监视点。

ZBREAK帮助文本

要在终端提示符下查看有关ZBREAK的联机帮助文本,请指定问号,如下所示:

用户名:yx
密码:******
DHC-APP>zb ?
 
ZB location{:parms}   Set breakpoint
ZB -location{#delay}  Disable breakpoint
ZB +location          Enable breakpoint
ZB --location         Remove breakpoint
 
location is a line reference, or *variable, or $
 
parms is action:{condition}:{execute}
 
action is B, L, L+, S, S+, T, or N  which mean
 BREAK, Line step, Single step, Trace, or No action
condition is a truth-valued expression
execute is code to be executed
 
/CLEAR                        Remove all breakpoints
/DEBUG{:device}               Clear or set debug device
/TRACE:{ON,OFF,ALL}{:device}  Enable or disable trace, or trace all lines
/ERRORTRAP:{ON,OFF}           Enable or disable error traps
/INTERRUPT:{NORMAL,BREAK}     Specify Control-C action
/{NO}STEP:{EXT,METHOD,DESTRUCT}  Control stepping into extensions and methods
 
DHC-APP>

参数

pc

可选的后置条件表达式。如果后置条件表达式为真(计算结果为非零数值),Caché 将执行该命令。如果后置条件表达式为false(计算结果为0),Caché将不执行该命令。

location

如果希望设置或取消断点或观察点,则需要location参数。它可以由一个符号(加号、减号或减号)和一个断点或观察点规范组成。支持各种符号和断点/观察点规范的组合:

或者,位置参数可以加上一个符号作为前缀,该符号指示如何处理指定位置的现有断点或观察点。可以指定无符号(Set)、减号(禁用)、加号(重新启用)或两个减号(删除)。还可以在$单步断点之前指定一个符号。尝试禁用、重新启用或删除不存在的断点或监视点会生成<command>错误。

符号前缀 含义
location 在location.x设置断点/观察点
–location#delay 禁用位置处的断点/观察点。可选的#Delay整数指定在中断之前禁用此断点或观察点的迭代次数。默认设置是禁用所有与断点或观察点的接触。#符号前不允许有空格。
+location 在位置重新启用断点/观察点。
-–location 删除位置处的断点/观察点。要删除所有断点和观察点,请使用ZBREAK/Clear。

行引用置必须位于命令边界上。在命令表达式中设置的变量不能用作位置。此类型的变量设置发生在$DATA$ORDER$QUERY函数的目标参数中。

condition

布尔表达式。如果为true(1),则应执行操作并执行EXECUTE_CODE(如果存在)。如果为FALSE(0),则忽略ACTION和EXECUTE_CODE。默认值为TRUE(1)。

execute_code

要执行的ObjectScript代码。此代码在执行操作之前执行。在执行代码之前,保存test的值。代码执行后,`test`的值将恢复为它在正在调试的程序中存在的值。

EXECUTE_CODE由XECUTE命令在内部执行。XECUTE只能访问公共变量。

但是,可以指定在EXECUTE_CODE中传递参数,以将私有变量传递给XECUTE

因为XECUTE参数包含带引号的字符串,所以当通过ZBREAK EXECUTE_ CODE参数传递代码时,必须使用双引号。正确执行此操作的最简单方法是首先将代码编写为实际的XECUTE命令,然后使用双引号创建相应的ZBREAK EXECUTE_CODE

例如,要在变量var更改时显示它的新值,首先编写一个XECUTE命令来显示它:

  XECUTE ("(arg) WRITE ""now var="",arg,!",$GET(var,"<UNDEFINED>")) 

则等效的ZBREAK命令将为:

  ZBREAK *var:::"(""(arg) WRITE """"now var="""",arg,!"",$GET(var,""<UNDEFINED>""))"

/command:option

用于为后续ZBREAK命令设置ZBREAK环境的命令关键字。/clear命令不接受任何选项。其他命令关键字后面跟一个选项,用冒号分隔。不允许有空格。

代码 描述
/CLEAR 删除所有断点。
/DEBUG:device 清除或设置调试设备。
/TRACE 启用或禁用向跟踪设备发送跟踪消息(后续ZBREAK命令中的“T”操作)。选项包括:ON=启用跟踪。:OFF=禁用跟踪。:ALL=跟踪所有行。通过指定设备,可以使用:ON或:ALL选项重定向输出。 例如,ZBREAK /TRACE:ON:DEVICE
/ERRORTRAP 启用或禁用$ZTRAP$ETRAP,并尝试/捕获错误捕获。选项包括:ON和:OFF。
/INTERRUPT 指定Ctrl-C操作。选项包括:Normal和:Break。如果正常,Ctrl-C将中断执行,并显示<interrupt>错误。如果是Break,Ctrl-C会中断执行,并显示<Break>错误,并建立一个新的堆栈框架。
/STEP 启用单步执行代码模块。选项有: :EXT(用户语言扩展);:METHOD(对象方法); :DESTRUCT(%destruct对象方法)。
/NOSTEP 禁用单步执行代码模块。选项有: :EXT(用户语言扩展);:METHOD(对象方法); :DESTRUCT(%destruct对象方法)。

/TRACE

/trace命令关键字指定用于接收跟踪消息的跟踪输出设备。它必须在发出带有action=“T”的ZBREAK之前指定。它可以指定为单独的ZBREAK命令(ZBREAK/TRACE:ON:DEVICE),或者这两个命令可以组合为ZBREAK S:"T",/TRACE:ON:device

一次只能有一个轨迹输出设备处于活动状态。只有跟踪消息写入跟踪输出设备;正常写入操作继续写入用户终端。

DHC-APP>SET btrace="E:\Logs\mydebugtrace.txt"
 
DHC-APP>OPEN btrace:"WN"
 
DHC-APP>ZBREAK /TRACE:ON:btrace
 
DHC-APP>ZBREAK
BREAK: Trace ON
 Trace device=E:\Logs\mydebugtrace.txt
 No breakpoints
 No watchpoints
 
DHC-APP>

如果先前的ZBREAK/TRACE:ON:DEVICE1已经激活了跟踪输出设备,则ZBREAK/TRACE:ON:DEVICE2会将DEVICE1跟踪设备替换为DEVICE2跟踪设备。

DHC-APP>SET steptrace="E:\Logs\mysteptrace.txt"
 
DHC-APP>OPEN steptrace:"WN"
 
DHC-APP>ZBREAK /TRACE:ALL:steptrace
 
DHC-APP>zb
BREAK:L+ Trace ON
 Trace device=E:\Logs\mysteptrace.txt
$ (single step) F:ET S:0 C: E:
 No watchpoints
 
DHC-APP>

/TRACE:OFF停用当前跟踪输出设备;不关闭该设备。可以指定ZBREAK/TRACE:OFFZBREAK/TRACE:OFF:DEVICE。/TRACE:OFF停用当前跟踪输出设备;如果没有活动的跟踪设备,则Caché不执行任何操作,也不发出任何错误。/TRACE:OFF:DEVICE停用指定的跟踪输出设备。如果指定的设备不是当前跟踪输出设备,/TRACE:OFF:DEVICE将发出<NOTOPEN>错误。

/STEP/NOSTEP

/STEP/NOSTEP命令关键字控制调试器是否单步执行某些类型的代码模块:

可以指定多个/STEP或/NOSTEP选项,如下例所示:

  ZBREAK /STEP:METHOD:DESTRUCT

示例

下面的示例显示不带参数的ZBREAK如何列出断点和监视点。第一个ZBREAK没有列出断点或观察点。然后,程序在x和y局部变量上设置两个观察点,ZBREAK显示此信息。接下来,程序设置$单步断点,ZBREAK显示断点和两个观察点。接下来,程序禁用x局部变量观察点;这对ZBREAK显示没有影响。最后,程序删除x局部变量观察点;该观察点从ZBREAK显示中消失:

  ZBREAK
    ZBREAK *x:"B"
    ZBREAK *y:"B"
  ZBREAK
    ZBREAK $
  ZBREAK
    ZBREAK -*x
  ZBREAK
    ZBREAK --*x
  ZBREAK
    ZBREAK /CLEAR
    ZBREAK /TRACE:ON
    ZBREAK *sp:"T"  
/// w ##class(PHA.COM.MOB.StockQty).GetInclbQty("4450||2",20,1,1)
DHC-APP> w ##class(PHA.COM.MOB.StockQty).GetInclbQty("4450||2",20,1,1)
 
Trace: ZBREAK SET batchQty=0 at zGetBatchQty+1^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=2000 at zGetBatchQty+3^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=2000 at zGetInclbQty+25^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=0 at zGetBatchQty+1^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=10 at zGetBatchQty+3^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=10 at zGetInclbQty+25^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=0 at zGetBatchQty+1^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=3000 at zGetBatchQty+3^PHA.COM.MOB.StockQty.1
 
Trace: ZBREAK SET batchQty=3000 at zGetInclbQty+25^PHA.COM.MOB.StockQty.1
1
上一篇 下一篇

猜你喜欢

热点阅读