断点的集合管理器
BreakpointStore
00 Remarks
对外是以文件名+行号的方式来进行断点的增删查改操作的, 而在内部则是使用经过规范化处理之后的文件名:行号字符串 作为键名来建立索引字典, 使得在程序执行的热点循环之中能够以 O(1) 的时间复杂度来完成断点的命中判断.
这里之所以不直接使用 Expression.GetBreakPointHashCode() 所返回的哈希码来做索引, 是因为该哈希码的计算逻辑位于外部的 sciBASIC 程序集之中, 其具体的哈希算法对于本项目而言是不透明的, 无法保证由用户所输入的文件名+行号能够反推出完全一致的哈希码
01 Syntax
SMRUCC.Rsharp.Interpreter.BreakpointStore
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| Add | 1 | 添加一个新的断点, 或者更新一个已经存在的断点 |
| Remove | 1 | 移除掉指定位置上的断点 |
| SetEnabled | 1 | 设置指定位置上的断点的启用状态 |
| Clear | 1 | 清除掉所有的断点 |
| GetBreakpoint | 1 | 获取得到指定位置上所设置的断点对象 |
| ListAll | 1 | 列出当前所注册的全部的断点 |
| TryHit | 1 | 判断给定的表达式所处的源代码位置上是否设置有处于启用状态的断点 |
03 Properties
04 Fields
| Name | Overloads | Summary |
|---|---|---|
| index | 1 | [规范化的 file:line => 断点对象] |
05 Members
Add(
String, Int32, String)添加一个新的断点, 或者更新一个已经存在的断点
Parameters
| Name | Type | Description |
|---|---|---|
file | String | 脚本文件的路径 |
line | Int32 | 源代码的行号 |
condition | String | 可选的条件表达式R#源代码, 只有当这个条件表达式的求值结果 为逻辑真值的时候程序才会在此处暂停 |
Returns
所添加的断点对象
Remove(
String, Int32)移除掉指定位置上的断点
Returns
目标断点是否存在并且已经被成功的移除?
SetEnabled(
String, Int32, Boolean)设置指定位置上的断点的启用状态
Clear
清除掉所有的断点
GetBreakpoint(
String, Int32)获取得到指定位置上所设置的断点对象
Returns
没有找到目标断点的话会返回空值
ListAll
列出当前所注册的全部的断点
TryHit(Expression)
判断给定的表达式所处的源代码位置上是否设置有处于启用状态的断点
Parameters
| Name | Type | Description |
|---|---|---|
expression | Expression | 当前即将被执行的表达式 |
Returns
命中了断点的话会返回对应的断点对象, 否则返回空值. 请注意, 这个函数并不会对条件断点的条件表达式进行求值, 条件的求值是由 DebuggerContext 来负责完成的
count
当前所注册的断点的总数量
isEmpty
当前是否没有注册任何的断点?
Remarks
这个属性主要是被用于在程序执行的热点循环之中做快速的短路判断
index
[规范化的 file:line => 断点对象]