有时您会将多个browser
放入要调试的函数中。我知道你可以用Q
退出整个shebang,但如果你想退出第二个浏览器(见下面的代码)并返回第一级浏览器怎么办?我听说过类型c
,但不会退出第二级browser
。
FUN <- function() {
browser() #first one
lapply(1:10, function(x) {
browser() #second one
return(x)
})
}
FUN()
答案 0 :(得分:8)
键入c
会退出当前的浏览器上下文。
但是,您的代码在执行期间执行一个“第一级”和10个不同的“第二级”浏览器调用。因此,当您退出一个二级浏览器时,您几乎会立即进入 next 一个,因此可能会显示键入c
没有不行。
键入c <RETURN>
11次以确认这是发生的事情。
> FUN()
Called from: FUN()
Browse[1]> c
Called from: FUN(1:10[[1L]], ...)
Browse[1]> c
Called from: FUN(1:10[[2L]], ...)
Browse[1]> c
Called from: FUN(1:10[[3L]], ...)
Browse[1]> c
Called from: FUN(1:10[[4L]], ...)
Browse[1]> c
Called from: FUN(1:10[[5L]], ...)
Browse[1]> c
Called from: FUN(1:10[[6L]], ...)
Browse[1]> c
Called from: FUN(1:10[[7L]], ...)
Browse[1]> c
Called from: FUN(1:10[[8L]], ...)
Browse[1]> c
Called from: FUN(1:10[[9L]], ...)
Browse[1]> c
Called from: FUN(1:10[[10L]], ...)
Browse[1]> c
答案 1 :(得分:7)
我同意Josh的意见,并希望建议您使用当前代码的两种替代方法:
1)debugonce
:如果我们调用foo
您的内部函数,那么debugonce(foo)
将仅在第一次调用foo
时启动调试器,{{1} }}
x==1
2)FUN <- function() {
browser()
foo <- function(x)return(x)
debugonce(foo)
lapply(1:10, foo)
}
和debug
。运行undebug
后,每次调用debug(foo)
时都会启动调试器,直到您运行foo
:
undebug(foo)
如果您想停止调试FUN <- function() {
browser()
foo <- function(x)return(x)
debug(foo)
lapply(1:10, foo)
}
,请在点击foo
之前键入undebug(foo)
,然后它会返回到第一级浏览器。
答案 2 :(得分:4)
我在第二个浏览器之后添加qwer
(或其他一些不存在的对象)。然后我手动翻阅代码,当我想退出第二个浏览器时,我只需按c
。它抛出一个对象不存在的错误。您将被回到第一个浏览器调用。
答案 3 :(得分:0)
运行undebug(yourFunction) 这将终止调试但仍保留在浏览器提示符下 然后键入c和(可能是几次)返回常规命令提示符