R Language
Debugowanie
Szukaj…
Za pomocą przeglądarki
Funkcji browser
można używać jak punktu przerwania: wykonanie kodu zostanie wstrzymane w punkcie, w którym zostanie wywołane. Następnie użytkownik może sprawdzić wartości zmiennych, wykonać dowolny kod R i przechodzić przez kod linia po linii.
Po wciśnięciu browser()
w kod uruchomi się interaktywny interpreter. Każdy kod R można uruchomić normalnie, a ponadto dostępne są następujące polecenia,
Komenda | Znaczenie |
---|---|
do | Wyjdź z przeglądarki i kontynuuj program |
fa | Zakończ pętlę prądową lub funkcję \ |
n | Step Over (oceń następną instrukcję, krok po kroku wywołania funkcji) |
s | Step Into (oceń następną instrukcję, wchodząc w wywołania funkcji) |
gdzie | Drukuj ślad stosu |
r | Wywołaj restart „resume” |
Q | Wyjdź z przeglądarki i wyjdź |
Na przykład możemy mieć skrypt typu
toDebug <- function() {
a = 1
b = 2
browser()
for(i in 1:100) {
a = a * b
}
}
toDebug()
Podczas uruchamiania powyższego skryptu początkowo widzimy coś takiego,
Called from: toDebug
Browser[1]>
Możemy wtedy wchodzić w interakcje z monitem,
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()
może być również używany jako część łańcucha funkcjonalnego, na przykład:
mtcars %>% group_by(cyl) %>% {browser()}
Za pomocą debugowania
Możesz ustawić dowolną funkcję debugowania za pomocą debug
.
debug(mean)
mean(1:3)
Wszystkie kolejne wywołania funkcji przejdą w tryb debugowania. Możesz wyłączyć to zachowanie za pomocą undebug
.
undebug(mean)
mean(1:3)
Jeśli wiesz, że chcesz tylko raz przejść do trybu debugowania funkcji, rozważ użycie debugonce
.
debugonce(mean)
mean(1:3)
mean(1:3)