我现在更频繁地使用debug()
,但有时我想知道哪些函数已被标记为调试。我知道您可以使用isdebugged()
来查明是否标记了特定函数。但是R有没有办法列出所有正在调试的函数?
答案 0 :(得分:7)
这很复杂,但确实有效:
find.debugged.functions <- function(environments=search()) {
r <- do.call("rbind", lapply(environments, function(environment.name) {
return(do.call("rbind", lapply(ls(environment.name), function(x) {
if(is.function(get(x))) {
is.d <- try(isdebugged(get(x)))
if(!(class(is.d)=="try-error")) {
return(data.frame(function.name=x, debugged=is.d))
} else { return(NULL) }
}
})))
}))
return(r)
}
您可以在所有环境中运行它,如下所示:
find.debugged.functions()
或者只是在你的“.GlobalEnv”中:
> find.debugged.functions(1)
function.name debugged
1 find.debugged.functions FALSE
2 test TRUE
这里我创建了一个我正在调试的测试函数。
答案 1 :(得分:2)
除非你想通过isdebugged()编写函数来解雇所有内容,否则我认为你无法做到。
在debug.c中,函数do_debug
检查在对象上设置的DEBUG标志。只有三个R函数调用do_debug
C调用:debug
,undebug
和isdebugged
。