przewodnikPoPakiecieR9

przewodnikPoPakiecieR9



110


pazuRiry


Debugger i pro/iler


Enter an environment number, or 0 to exit Selection: 1 Brousing in the environment with cali:

funkcjaCnapis")

Called from: debugger.look(ind)

Bro»se[l]> x [1] "napis"

Browse[i]>

Available environments had calls:

1: funkcjaCnapis")

2: log(x)

3: .execute(.PrimitlveClog"), x, envir = sys.parent(l))

Enter an environment number, or 0 to exit Selection: 0

Po uruchomieniu funkcji debuggerO wyświetla się lista dostępnych przestrzela,;! nazw związanych z wywoływaniami kolejnych funkcji. W rozważanym przypadki! ' błąd został zgłoszony przez wbudowaną w R funkcję oznaczoną .Primitive("log"}.i‘d Ta wbudowana funkcja została wywołana przez funkcję log(base), a ta z kolei prz^||j funkcję funkcjaO. Pierwsze pytanie debuggera dotyczy numeru przestrzeni nazw, którą chcemy prześledzić. W powyższym przykładzie wybieramy 1, a więc prze® strzeń nazw widzianą przez funkcją funkcjaO. Po tym wyborze linia rozpoczyna) się prefixem Browse[l]>, który oznacza, że jesteśmy w przestrzeni nazw opatrzoąSf indeksem 1. Możemy teraz sprawdzić wartości zmiennych w tej przestrzeni, nazvrf w chwili, w której pojawił się błąd. W naszym przykładzie sprawdziliśmy war.ti zmiennej x, czyli argumentu funkcji funkcjaO. Okazało się, że jest to napis, ąwg wiemy już na czym polegał problem! Możemy teraz opuścić debugger klikając EN1 a następnie wybierając przestrzeń nazw o numerze 0.

Zaletą debugowania z zapisywaniem całego środowiska R jest to, że jeżeli błądŁ,, pojawił się podczas wykonywania programu w trybie wsadowym lub na innym końj^Jr"


'> tracebackO 1 2: funkcja(y) 1: funkcja2(1,


>    tt podajemy argument złego typu, to musi wywołać błąd

>    funkcjaCnapis") log: Using log baae e.

Error in log(x) : Non-numeric argument to mathematical functlon Execution halted

Po napotkaniu błędu (a więc w chwili, gdy próbowaliśmy wyznaczyć logąrikn z napisu) zostało wywołane polecenie dump. f rames ( " errorDump " , TRUE). Zapis ono stan R do pliku errorDump. rda. Możemy teraz odczytać ten stan i przeanaj zować go funkcją debuggerO. Prześledźmy poniższy przykład.

>    tt wczytujemy zawartość pliku “errorDump.rda"

>    load C"errorDump.rda M)

>    tt uruchamiamy debugger na odczytanym środowisku

>    debugger(errorDump)

Execution halted

Available envlronments had calls:

1: funkcjaCnapis")

2: log(x)

3: .execute<.Primitive("log"), x, envir « sys.parent(l))

literze, to możemy błędogenną sytuację skopiować na inny komputer i tam ją prze-lizować lub wysłać ją komuś z prośbą o pomoc. Gdybyśmy chcieli, by po napotkają błędu natychmiast pojawiło się okienko debuggera, możemy skorzystać z funkcji |||£i:over(utils). W tym celu należy wykonać następujące polecenie.

IłiptipjiE (error * recover)

Kk-^v'    *

Jeżeli błąd już wystąpił, a my nie kazaliśmy wcześniej zapisać informacji o sta-t '■ . nie zmiennych w chwili wystąpienia błędu, to do zorientowania się, gdzie błąd mógł * i j ĄwystąP*t. możemy użyć funkcji traceback(base). Funkcja ta wypisuje listę wywo-iCłanych funkcji wraz z argumentami z jakimi zostały one wywołane. Prześledźmy poniższy przykład.

■ J zdefiniujmy jeszcze jedną pomocniczą funkcję | ;i.j;1f)uikcja2 = fimction(x,y) ffunkcja(x); funkcja(y)} to wywołanie prowadzi do błędu > funkcja2(l,"jeden")

Error in log(x) : Non-numeric argument to mathematical function :■ s'V' '# prześledźmy, które funkcje i z jakimi argumentami były wywoływane

"jodan")

Jeszcze innym sposobem szukania błędów jest debugowanie funkcji krok po kro-:£ku. Do tego celu służy funkcja debug(base). Zaznacza ona, że wskazana argumentem funkcja ma być uruchamiana w trybie śledzenia krok po kroku. W trakcie wykony-' ; wania tej funkcji można korzystać z poleceń n (wykonaj kolejną linię kodu), c (wykonaj całą funkcję) lub Q (zamknij debugger). Debugowanie wyłącza się funkcją undebug(base). Na poniższym przykładzie prezentujemy działanie funkcji debugO.

-^^r7jr:*-iCTrrifgrr Tiirii"ji g-ki# zaznacz funkcje funkcja2() do debuggowania ■ > debug(funkcja2)

> i wywołujemy funkcje funkcja2(), uruchamia się też debugger tJy&nkoj a2 (1, "jeden”) debugging in: funkcja2(l, “jeden")

-debug: {    j’ '

funkcja(x)

Ife funkcja(y)

. .|^.ó''deCl]> x tt przed pierwszym poleceniem, sprawdźmy wartość x

JBfbyseCl]> n tt wykonywana jest pierwsza linia i przechodzimy do kolejnej llfdbug: funkcja(x)

ifięowse[l]> y tt przed drugim poleceniem, sprawdźmy wartość y !J[1] "jeden"

n # wykonywana jest druga linia debug: funkcja(y)

'■‘Brnyse[1] > n tt napotykamy błąd

jĘfror in log(x) : Non-numeric argument to mathematical function



Wyszukiwarka

Podobne podstrony:
1.2.2 IP address The IP address (Internet Protocol Address) is an Identification number assigned to
cw0016 -- tULIURtiEl Rewrite these sentences using an appropriate modal form to loplm o lim words in
80813 P1130025 The embiyonic veside grows at an average ratę of 3 to 4 mm per day during the second
0 Uzupełnij zdania, używając a/an, some lub any. 0 1 can t see arb! children in the park coday. 1
[DPG] Page9 Initial comments This is an unnatural pose. The character doesn t look to be standing p
[DPG] Page9 (2) rBZSBS- This is an unnatural pose. The character doesn t look to be standing proper
image006 Open location Enter an Internet location to open here: For example:
mity043 Kagnimir - hrabia z Góry, rzekomy kronikarz polski. (Zob. Pro-kosz.) Kana an (Kena an) - syn
DSCF4974 & jako lek znieczulenia miejscowego i przewodowego ^ * ar w iecasniti aytmu pro&ist

więcej podobnych podstron