當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。