如果我有几个相互关联的函数,那么追踪它们的路径会很有用。即每次 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_my_fns <- function()
{
fn_names <- c("f", "g", "h")
invisible(trace(
fn_names,
where = globalenv()
))
}
untrace_my_fns()
出于某种原因,这并没有正确地取消跟踪函数。要了解这一点,请查看
f
body(f)
如果我直接在每个函数上调用 untrace,例如在命令行中调用 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...
...因为您调用了 trace
而不是 untrace
!
关于debugging - 如何取消跟踪多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10132365/