R Language
Debug
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)