9

browserデバッグする関数に複数の を投げることがあります。シバン全体を終了できることは知っていますがQ、2 番目のブラウザー (以下のコードを参照) を終了してブラウザーの最初のレベルに戻りたい場合はどうすればよいでしょうか? タイプは聞いcたことがありますが、それは 2 番目のレベルを終了しませんbrowser

FUN <- function() {
browser()                      #first one
    lapply(1:10, function(x) {
browser()                      #second one
        return(x)
    })
}

FUN()
4

4 に答える 4

9

入力すると、現在のブラウザー コンテキストc が終了します。

ただし、コードは実行中に 1 つの「第 1 レベル」ブラウザ呼び出しと 10 個の個別の「第 2 レベル」ブラウザ呼び出しを実行します。その結果、第 2 レベルのブラウザーを終了するとすぐにのブラウザーに移動するため、入力cが機能していないように見える場合があります。

11 回入力c <RETURN>して、これが起こっていることを確認します。

> 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
于 2012-12-01T20:19:22.067 に答える
8

私は Josh に同意し、現在のコードに代わる次の 2 つの方法を提案したいと思います。

1) debugonce:foo内部関数を呼び出すと、最初に呼び出されたときにdebugonce(foo)のみデバッガが起動します。foox==1

FUN <- function() {
  browser()
  foo <- function(x)return(x)
  debugonce(foo)
  lapply(1:10, foo)
}

2)debugundebug. を実行すると、 が呼び出されるdebug(foo)たびにデバッガが起動し、実行するまでは次のようになります。fooundebug(foo)

FUN <- function() {
  browser()
  foo <- function(x)return(x)
  debug(foo)
  lapply(1:10, foo)
}

デバッグを停止したい場合は、ヒットする前fooに入力すると、最初のレベルのブラウザーに戻ります。undebug(foo)c

于 2012-12-01T22:45:04.213 に答える
4

qwer2 番目のブラウザーの直後に (または存在しない他のオブジェクトを)追加します。次に、手動でコードをめくって、2 番目のブラウザーを終了したいときに を押しcます。オブジェクトが存在しないというエラーをスローします。最初のブラウザ呼び出しに戻ります。

于 2012-12-02T12:23:23.957 に答える