有时你会将多个browsers抛入一个函数来调试.我知道你可以退出整个shebang,Q但如果你想退出第二个浏览器(见下面的代码)并返回第一级浏览器怎么办?我听过类型,c但不会退出第二级browser.
FUN <- function() {
browser() #first one
lapply(1:10, function(x) {
browser() #second one
return(x)
})
}
FUN()
Run Code Online (Sandbox Code Playgroud)
键入c 会退出当前的浏览器上下文.
但是,您的代码在执行期间执行一个"第一级"和10个不同的"第二级"浏览器调用.因此,当您退出一个二级浏览器时,您几乎立即被抛入下一个浏览器,因此可能看起来键入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
Run Code Online (Sandbox Code Playgroud)
我同意Josh的意见,并希望建议您使用当前代码的两种替代方法:
1)debugonce:如果我们调用foo你的内部函数,那么debugonce(foo)只会在第一次foo调用时启动调试器x==1.
FUN <- function() {
browser()
foo <- function(x)return(x)
debugonce(foo)
lapply(1:10, foo)
}
Run Code Online (Sandbox Code Playgroud)
2)debug和undebug.运行后debug(foo),调试器将在每次foo调用时启动,直到您运行undebug(foo):
FUN <- function() {
browser()
foo <- function(x)return(x)
debug(foo)
lapply(1:10, foo)
}
Run Code Online (Sandbox Code Playgroud)
如果要停止调试foo,请undebug(foo)在点击之前键入,c然后它将返回到第一级浏览器.