前页 | 后页 |
行动点
行动点是可以执行动作的断点。遇到断点时,调试器会调用运行脚本,然后进程继续运行。行动点是复杂的调试工具,可为专业开发人员提供额外的命令套件。有了它们,开发人员可以改变函数的行为,捕捉行为改变的点,并修改/检测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 ,则可以使用 ++ 和 -- 运算符对其进行递增和递减。例如:
- 创建一个 UDV 并将其值和类型设置为本地整数变量。
AP1:设置#myint = nTotalSoFar - 增加 UDV。
AP2:#myint++ - 减少 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 文件规范
例如:
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 - 两者都必须为真 或 - 一个必须为真 && - 两者都必须为真 || - 一个必须是真的 ^ - 异或(只有一个必须为真) |