预订演示
前页 后页

行动点

行动点是可以执行动作的断点。遇到断点时,调试器会调用运行脚本,然后进程继续运行。行动点是复杂的调试工具,可为专业开发人员提供额外的命令套件。有了它们,开发人员可以改变函数的行为,捕捉行为改变的点,并修改/检测object的状态。为了支持这些特征,行动点可以改变原始局部变量和成员变量的值,可以定义自己的“用户定义变量”并改变程序执行。

行动点和断点中的用户定义变量

用户定义的变量 (UDV):

  • 提供在 Actionpoint 语句中设置 UDV 原语或string的方法
  • 可用于多个标记/断点的条件语句
  • 可以在同一个局部变量窗口中轻松查看
  • 调试结束时会记录所有 UDV 的最终值。

在 UDV 语法中,UDV 名称:

  • 必须以 #(哈希)字符开头
  • 不区分大小写

行动点声明

Actionpoint 语句可以包含 set 命令、goto 命令和 jmp 命令。

设置命令

设置变量值。一个 Actionpoint 语句可以包含多个“set”命令,所有这些命令都应该在任何“goto”命令之前。

'set' 命令语法是:

设置 LHS = RHS

在哪里:

  • LHS = 变量的名称为:
    - 用户定义变量 (UDV),例如 #myval
    - 局部变量或成员变量,例如 strName 或 this.m_strName
  • RHS = 要分配的值:
    - 作为文字或局部变量
    - 如果是文字,则为以下之一:整数、布尔值、浮点数、字符或string

set 命令 - 变量示例

UDV 示例

局部变量示例

设置 #mychar = 'a'

设置 this.m_nCount=0

设置#mystr =“一个string ”

设置 bSuccess=false

设置#myint = 10

设置#myfloat = 0.5

设置#mytrue = true

转到命令

此命令将执行切换到函数中的不同行号。 Actionpoint 语句只能包含一个 goto 命令,作为语句中的最后一个命令。

goto 命令语法为:

转到L

其中L是当前函数中的行号。

goto命令使用断点来实现其目标,这会导致代码执行稍有延迟。这在非常频繁执行的代码区域中可能很明显,因此您可能更喜欢在此类代码中使用 jmp 命令,以实现相同的执行转移但延迟更少。

jmp 命令

jmp命令实际上与goto命令相同。

跳转125

转到125

这两个命令都会导致执行更改为第 125 行。

然而, jmp语句在内部使用检测来指示程序移动执行,而goto语句使用断点来执行此操作,这会导致处理延迟。因此,区别在于jmp语句的卓越性能,尤其是在代码区域执行非常频繁的情况下。

整数符

如果存在用户定义变量 (UDV) 并且它的类型为int ,则可以使用 ++ 和 -- 运算符对其进行递增和递减。例如:

  1. 创建一个 UDV 并将其值和类型设置为本地整数变量。
    AP1:设置#myint = nTotalSoFar
  2. 增加 UDV。
    AP2:#myint++
  3. 减少 UDV。
    AP3:#myint--

定时器操作

行动点可以报告两点之间经过的时间。只有一个定时器可用,可以通过 startTimer 命令重置或启动。然后可以使用 printTimer 命令打印当前经过的时间。最后,打印总经过时间并使用 endTimer 命令结束计时器。

示例动作点条件

使用文字和常量:

  • (#mychar='a')
  • (#mystr <> "")
  • (#myint > 10)
  • (#myfloat > 0.0)

使用局部变量:

  • (#myval == this.m_strValue)
  • (#myint <> this->m_nCount)
  • (#myint != this->m_nCount)

指令记录

指令记录可用于检测已知行为的变化;执行点 ( B ) 与先前的执行 (s) ( A ) 不同。命令是:

  • recStart - 开始录制或开始比较之前的录制是否存在
  • recStop - 结束录制
  • recPause - 暂停录音
  • recResume - 恢复录制
recStart命令开始记录指令。然后存储执行的指令。当遇到recStop命令时,记录会被保存。两个行动点之间的任一时间只能保存一个录音。当遇到recStart并且存在先前的记录时,调试器将开始将每个后续指令与其记录进行比较。它可以执行许多比较。如果并且当检测到差异时,调试器将中断并且行为改变的代码行将显示在代码编辑器中。比较的迭代也被打印出来。

录音默认存储在内存中,但也可以使用命令语法将其存储到文件中:

recStart 文件规范

例如:

recStart c:\mylogs\onclickbutton.dat

当遇到指定文件的recStart命令并且该文件存在时,它将被加载到内存中并且调试器将立即进入比较模式。

表达式

Breakpoint、Actionpoint 和测试点条件表达式中没有隐含的优先级。在复杂表达式中,必须使用括号。请参阅以下示例:

类型

示例

Actionpoint UDV 示例

(#myint=1) 与 (#mystr="德国")

局部变量示例

(this.m_nCount > 10) 或 (nCount%1)

(this.m_nCount > 10) 或 (bForce)

条件表达式中的等式运算符

<> - 不等于

!= - 不等于

== - 相等

= - 相等

Actionpoint 中的赋值运算符

= - 将 RHS 分配给 LHS

条件表达式中的算法运算符

/  - 分配

+ - 加号

-  - 减

* - 乘法

% - 模量

条件表达式中的逻辑运算符

AND - 两者都必须为真

或 - 一个必须为真

&& - 两者都必须为真

|| - 一个必须是真的

^ - 异或(只有一个必须为真)