退出当前浏览器(返回一级)

Tyl*_*ker 8 r

有时你会将多个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)

Jos*_*ien 8

键入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)


flo*_*del 7

我同意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)debugundebug.运行后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然后它将返回到第一级浏览器.


Rom*_*rik 5

我在第二个浏览器之后添加qwer(或一些其他不存在的对象)。然后我手动翻阅代码,当我想退出第二个浏览器时,我只需按c。它会抛出对象不存在的错误。您将返回到第一个浏览器调用。