Recherche…


Utiliser le navigateur

La fonction de browser peut être utilisée comme un point d'arrêt: l'exécution du code s'interrompt au point appelé. L'utilisateur peut alors inspecter les valeurs de variable, exécuter du code R arbitraire et parcourir le code ligne par ligne.

Une fois que browser() est entré dans le code, l'interpréteur interactif démarrera. Tout code R peut être exécuté normalement, et les commandes suivantes sont également présentes:

Commander Sens
c Quitter le navigateur et continuer le programme
F Terminer la boucle ou la fonction en cours \
n Pas à pas (évaluer l'instruction suivante, passer outre les appels de fonctions)
s Pas à pas (évaluation de l'instruction suivante, passage aux appels de fonctions)
Trace de pile d'impression
r Invoquer "reprendre" redémarrer
Q Quittez le navigateur et quittez

Par exemple, nous pourrions avoir un script comme,

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

toDebug()

Lors de l'exécution du script ci-dessus, nous voyons initialement quelque chose comme:

Called from: toDebug
Browser[1]>

Nous pourrions alors interagir avec l'invite en tant que telle,

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() peut également être utilisé dans le cadre d'une chaîne fonctionnelle, comme ceci:

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

Utiliser le débogage

Vous pouvez définir n'importe quelle fonction pour le débogage avec debug .

debug(mean)
mean(1:3)

Tous les appels ultérieurs à la fonction entreront en mode débogage. Vous pouvez désactiver ce comportement avec undebug .

undebug(mean)
mean(1:3)

Si vous savez que vous souhaitez uniquement entrer dans le mode de débogage d'une fonction, envisagez l'utilisation de debugonce .

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow