2010-11-23 10 views
5

Stellen Sie sich vor, Sie debuggen eine Funktion innerhalb einer Funktion. Sie wären auf Level 2 (Browser [2]). Gibt es eine Möglichkeit, Level 2 zu beenden und auf Level 1 zu gehen? Q werden Sie aus dem Debuggen lassen, also suche ich nach etwas, das gerade das aktuelle Niveau beenden würde.Browser-Anruf mit einer Drehung beenden

+0

Können Sie uns ein Beispiel dafür geben, wie Sie die Eingabeaufforderung Browser [2] erhalten? Für all meine Bemühungen, Funktionen in Funktionen zu verschachteln, kann ich nur einen Browser [1] -Prompt bekommen ... Ich bin mir sicher, dass ich es gesehen habe ... – Spacedman

+0

Ich benutze Rterm. Was benutzt du? –

Antwort

2

Wenn Sie zum Funktionskörper der Ebene 2 wechseln können, erhalten Sie einen Fehler. Setzen Sie dann die Fehleroption auf recover. Jetzt können Sie zwischen den Funktionen wechseln, wie Sie möchten.

foo <- function() bar() 
bar <- function() stop("start debug here") 

options(error = recover) 
foo() 
+0

Ein anderer Weg wäre, browser(); stop() 'zu haben, bis Sie absolut sicher sind, dass Sie Ihre Funktion ausführen wollen. Du entfernst 'stop()' und bist auf dem Weg. Vergessen Sie nicht, die Änderungen zu "quellen"(). –

2

Ist c nach was Sie suchen? Es setzt die Ausführung des aktuellen Levels fort und kehrt zu Level 1 zurück. Vermutlich möchten Sie, dass alles, was auf Level 2 lief, beendet wurde, sodass Level 1 in einem konsistenten Zustand ist.

+0

Eine andere Art zu tun, was ich will, aber sagen wir mal, ich möchte vorher aufhören (stell dir vor, dass der Lauf Stunden dauert, wie in meinem Fall). –