Ricerca…


Usando il browser

La funzione browser può essere utilizzata come un punto di interruzione: l'esecuzione del codice si interromperà nel punto in cui viene chiamata. Quindi l'utente può controllare i valori delle variabili, eseguire codice R arbitrario e scorrere il codice riga per riga.

Una volta che il browser() viene colpito nel codice, inizierà l'interprete interattivo. Qualsiasi codice R può essere eseguito normalmente, e inoltre sono presenti i seguenti comandi,

Comando Senso
c Esci dal browser e continua il programma
f Termina loop o funzione corrente \
n Passaggio (valuta la prossima affermazione, superando le chiamate di funzione)
S Entra (valuta la prossima affermazione, entra nelle chiamate di funzione)
dove Stampa traccia dello stack
r Richiamare il riavvio "riprendi"
Q Esci dal browser e chiudi

Ad esempio potremmo avere una sceneggiatura come,

toDebug <- function() {
    a = 1
    b = 2
    
    browser()
    
    for(i in 1:100) {
        a = a * b
    }
}

toDebug()

Quando esegui lo script sopra riportato inizialmente vediamo qualcosa di simile,

Called from: toDebug
Browser[1]>

Potremmo quindi interagire con il prompt in questo modo,

Called from: toDebug
Browser[1]> a
[1] 1
Browser[1]> b
[1] 2
Browse[1]> n
debug at #7: for (i in 1:100) {
    a = a * b
}
Browse[2]> n
debug at #8: a = a * b
Browse[2]> a
[1] 1
Browse[2]> n
debug at #8: a = a * b
Browse[2]> a
[1] 2
Browse[2]> Q

browser() può anche essere usato come parte di una catena funzionale, in questo modo:

mtcars %>% group_by(cyl) %>% {browser()}

Usando il debug

È possibile impostare qualsiasi funzione per il debugging con debug .

debug(mean)
mean(1:3)

Tutte le chiamate successive alla funzione entrano in modalità di debug. Puoi disabilitare questo comportamento con undebug .

undebug(mean)
mean(1:3)

Se si sa che si desidera accedere alla modalità di debug di una funzione solo una volta, considerare l'uso di debugonce .

debugonce(mean)
mean(1:3)
mean(1:3)


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow