Debugging 如何取消跟踪多个函数

Debugging 如何取消跟踪多个函数,debugging,r,trace,Debugging,R,Trace,如果我有几个相互关联的函数,那么跟踪它们之间的路径会很有用。也就是说,每次R进入或离开某个函数时,使用trace函数给出一条消息。比如说, f <- function() g() g <- function() h() h <- function() { if(runif(1) > 0.3) g() else 99 } trace_my_fns <- function() { fn_names <- c("f", "g", "h") invisib

如果我有几个相互关联的函数,那么跟踪它们之间的路径会很有用。也就是说,每次R进入或离开某个函数时,使用
trace
函数给出一条消息。比如说,

f <- function() g()
g <- function() h()
h <- function()
{
 if(runif(1) > 0.3) g() else 99
}

trace_my_fns <- function()
{
  fn_names <- c("f", "g", "h")
  invisible(trace(
    fn_names,
    tracer = quote(0),
    exit   = quote(0),
    where  = globalenv()
  ))
}

trace_my_fns()
set.seed(4)
f()
如果我直接在每个函数上调用untrace,例如在commmand行调用
untrace(f)
,它就会工作。我应该如何创建一个函数来同时取消对所有函数的跟踪?

好的,改为:

untrace_my_fns <- function()
{
  fn_names <- c("f", "g", "h")
  invisible(untrace(
    fn_names,
    where = globalenv()
  ))
}

untrace_my_fns()
set.seed(4)
f() # no more tracing...

取消追踪我的好吧,这太尴尬了。非常漂亮,谢谢。我现在要去拿一个小猎鹰护照。
f
body(f)
untrace_my_fns <- function()
{
  fn_names <- c("f", "g", "h")
  invisible(untrace(
    fn_names,
    where = globalenv()
  ))
}

untrace_my_fns()
set.seed(4)
f() # no more tracing...