当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R findLineNum 查找源代码行的位置,或在那里设置断点


R语言 findLineNum 位于 utils 包(package)。

说明

这些函数使用 keep.source = TRUE 解析代码时保存的信息来定位包含特定源代码行的对象。

用法

findLineNum(srcfile, line, nameonly = TRUE,
            envir = parent.frame(), lastenv)

setBreakpoint(srcfile, line, nameonly = TRUE,
              envir = parent.frame(), lastenv, verbose = TRUE,
              tracer, print = FALSE, clear = FALSE, ...)

参数

srcfile

包含源代码的文件的名称。

line

文件内的行号。有关指定此选项的替代方法,请参阅详细信息。

nameonly

如果 TRUE (默认值),我们只需要匹配 basename(srcfile) ,而不是完整路径。

envir

我们从哪里开始寻找函数对象?

lastenv

我们在哪里停下来?查看详细信息。

verbose

我们应该打印有关断点设置位置的信息吗?

tracer

传递给 trace 的可选 tracer 函数。默认情况下,插入对 browser 的调用。

print

要传递给 traceprint 参数。

clear

如果 TRUE ,则调用 untrace 而不是 trace

...

要传递给 trace 的其他参数。

细节

findLineNum 函数搜索环境 envir 中的所有对象、其父对象、祖父母等,一直回到 lastenv

如果未指定envir,则lastenv 默认为全局环境;如果指定envir,则默认为根环境emptyenv()。 (第一个默认值往往相当快,通常会找到除 S4 方法之外的所有用户代码;第二个默认值相当慢,因为它通常会搜索所有附加的系统库。)

为了方便起见,可以间接指定envir:如果它不是环境,则将其替换为environment(envir)

setBreakpointtraceuntrace 的简单包装函数。它将在 findLineNum 找到的位置设置或清除断点。

srcfile 通常是作为字符串输入的文件名,但它可能是 "srcfile" 对象,或者可能包含类似 "filename.R#nn" 的后缀,在这种情况下,数字 nn 将用作默认值对于line

正如说明中所说明的where手册页上的参数trace, 这R包系统使用一种复杂的方案,可能在包中包含多个函数副本。用户通常会在搜索路径上看到公共路径,而包中的代码将在包命名空间中看到私有路径。如果你设置envir默认情况下,到包中函数的环境findLineNum将找到两个版本,并且setBreakpoint将在两者中设置断点。 (这可以使用控制lastenv;例如:,envir = environment(foo),lastenv = globalenv()将仅找到私有副本,因为搜索在看到公共副本之前已停止。)

S 版本 4 的方法也很难找到。它们与通用函数一起存储,该函数可能位于base或其他包,所以通常需要有lastenv = emptyenv()为了找到他们。在某些情况下,转换是通过R存储它们时以及findLineNum可能找不到原始代码。许多特殊情况,例如尚不支持原始泛型上的方法。

findLineNum 返回包含位置信息的对象列表。为它们定义了print 方法。

setBreakpoint没有有用的返回值;调用它是因为调用 traceuntrace 的副作用。

例子

## Not run: 
# Find what function was defined in the file mysource.R at line 100:
findLineNum("mysource.R#100")

# Set a breakpoint in both copies of that function, assuming one is in the
# same namespace as myfunction and the other is on the search path
setBreakpoint("mysource.R#100", envir = myfunction)

## End(Not run)

作者

Duncan Murdoch

也可以看看

trace

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Find the Location of a Line of Source Code, or Set a Breakpoint There。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。