nuget server logo nuget api documents
↑

API Docs / REnv / BreakpointStore

BreakpointStore

Full name SMRUCC.Rsharp.Interpreter.BreakpointStore Assembly REnv Members 10

断点的集合管理器

00 Remarks

对外是以文件名+行号的方式来进行断点的增删查改操作的, 而在内部则是使用经过规范化处理之后的文件名:行号字符串 作为键名来建立索引字典, 使得在程序执行的热点循环之中能够以 O(1) 的时间复杂度来完成断点的命中判断.

这里之所以不直接使用 Expression.GetBreakPointHashCode() 所返回的哈希码来做索引, 是因为该哈希码的计算逻辑位于外部的 sciBASIC 程序集之中, 其具体的哈希算法对于本项目而言是不透明的, 无法保证由用户所输入的文件名+行号能够反推出完全一致的哈希码

01 Syntax

SMRUCC.Rsharp.Interpreter.BreakpointStore

02 Methods

NameOverloadsSummary
Add 1 添加一个新的断点, 或者更新一个已经存在的断点
Remove 1 移除掉指定位置上的断点
SetEnabled 1 设置指定位置上的断点的启用状态
Clear 1 清除掉所有的断点
GetBreakpoint 1 获取得到指定位置上所设置的断点对象
ListAll 1 列出当前所注册的全部的断点
TryHit 1 判断给定的表达式所处的源代码位置上是否设置有处于启用状态的断点

03 Properties

NameOverloadsSummary
count 1 当前所注册的断点的总数量
isEmpty 1 当前是否没有注册任何的断点?

04 Fields

NameOverloadsSummary
index 1 [规范化的 file:line => 断点对象]

05 Members

method Add #
Add(String, Int32, String)

添加一个新的断点, 或者更新一个已经存在的断点

Parameters
NameTypeDescription
fileString

脚本文件的路径

lineInt32

源代码的行号

conditionString

可选的条件表达式R#源代码, 只有当这个条件表达式的求值结果 为逻辑真值的时候程序才会在此处暂停

Returns

所添加的断点对象

method Remove #
Remove(String, Int32)

移除掉指定位置上的断点

Returns

目标断点是否存在并且已经被成功的移除?

method SetEnabled #
SetEnabled(String, Int32, Boolean)

设置指定位置上的断点的启用状态

method Clear #
Clear

清除掉所有的断点

method GetBreakpoint #
GetBreakpoint(String, Int32)

获取得到指定位置上所设置的断点对象

Returns

没有找到目标断点的话会返回空值

method ListAll #
ListAll

列出当前所注册的全部的断点

method TryHit #
TryHit(Expression)

判断给定的表达式所处的源代码位置上是否设置有处于启用状态的断点

Parameters
NameTypeDescription
expressionExpression

当前即将被执行的表达式

Returns

命中了断点的话会返回对应的断点对象, 否则返回空值. 请注意, 这个函数并不会对条件断点的条件表达式进行求值, 条件的求值是由 DebuggerContext 来负责完成的

property count #
count

当前所注册的断点的总数量

property isEmpty #
isEmpty

当前是否没有注册任何的断点?

Remarks

这个属性主要是被用于在程序执行的热点循环之中做快速的短路判断

field index #
index

[规范化的 file:line => 断点对象]