piątek, 13 lutego 2009

Debugowanie oraz pare komend

Tak jak pisałem i obiecałem w poprzedniej lekcji chciałbym dziś przybliżyć problem debugowania czyli szukania błędów. Sposobów jest kilka a sam program easyUO, który interpretuje nasze skrypty ma bardzo przydatne do tego narzędzie. Nazywają się "step over", "step into" oraz "step out". Jak można domyślić się po nazwach wykonują nasze skrypty linijka po linijce w takiej szybkości i tak jak chcemy. Wszystkie je można znaleźć w zakładce control na górze.

Step over (f8)
Czyli wykonanie kolejnej linii. Wciskając f8 klient wykonuje kolejna linijkę po czym zatrzymuje skrypt. My w tym czasie możemy spokojnie zobaczyć efekty, co się stało, oraz gdzie znajdujemy się w tym momencie. Trzeba tutaj powiedzieć coś na temat subów. Czyli wydzielonych bloków w kodzie programu do których można skoczyć czy nawet przekazać im parametry. Step over nie pokazuje co dokładnie dzieje się w takich subach. Jeżeli natrafi na linijkę gosub xxx to wykona całość zawartości suba i przejdzie do kolejnej linijki. To w sumie odróżnia step over od step into

Step into (f7)
Tak jak pisałem wyżej, ta komenda również wykonuje skrypt linijka po linijce, jednak jeżeli natrafia na fragment dotyczący suba, to skacze do miejsca w kodzie, gdzie on się znajduje i możemy dokładnie widzieć co dzieje się w danej chwili w subie do którego skoczyliśmy. O subach, które są odpowiednikami funkcji z innych języków programowania opowiem później, gdyż warto jednak omówić to szerzej.

Step out (f6)
Na samym początku myślałem, że działa to nieco inaczej, lecz jak się przekonałem myliłem się. A dokładnie step over powoduje wyjście z suba. Czyli, jeżeli używaliśmy step into przy naszym szukaniu błędów, to gdy znajdujemy się w jakimś subie, step over wykonuje go do końca i wychodzi, tak iż w następnym kroku jesteśmy już poza subem

Polecam bardzo przetestowanie samemu jak dokładnie działają te 3 proste rzeczy w praktyce. Zamieszczam poniżej bardzo prosty skrypt, na którym dobrze widać czym różnią sie od siebie te 3 funkcjonalności.

start:
wait 1
event sysmessage b
wait 1
gosub a
wait 1
goto start

sub a
event sysmessage a
wait 1
return


Na temat debugowania słów kilka
Chciałem jeszcze napisać jak ja szukam błędów w moich skryptach. Zazwyczaj umieszczam w ważnych miejscach linijkę event sysmessage 1 lub inny numer. Bardzo przydatne to jest gdy chcemy sprawdzać szybkość reakcji skryptu (chociaż tutaj można zastosować lesze techniki związane z czasem) oraz czy dany skrypt wchodzi do jakiejś pętli lub spełniony jest jakiś warunek. Myślę, że sam podczas pisania skryptów, oraz szukania w nich błędu znajdziesz jak Tobie najlepiej się ich szuka. Jednak step over lub step into są chyba najlepszą metodą, ponieważ możemy śledzić powoli linijka po linijce w trakcie wykonywania pliku kod i widzimy na bierząco co się dzieje. Gorąco polecam zaznajomienie się z tym tematem w praktyce.

Parę innych przydatnych komend
Zanim przejdę do konkretnych komend, które sprawiają, że nasze postacie zaczynają robić coś w Ultimie, chcę jeszcze przedstawić komendy, które służą do zarządzania wykonywaniem skryptu.

exit - komenda ta użyta w skrypcie powoduje zakończenie wykonywania skryptu.
halt - dokładnie to samo co exit. Nie wiem dlaczego są 2 komendy do tego samego

call - powoduje wykonanie skryptu w podanej lokalizacji
dokładnie składnia wygląda:
call plik parametry
Jak można przeczytać w dokumentacji plik musi być podany w formacie C:\MyDocu~\blabla.txt a nie C:\My Documents\blabla.txt
Można również przekazywać parametry (tak jak w gosub)

pasue - powoduje zatrzymanie skryptu. Jeżeli damy po tej komendzie play to zacznie ona od miejsca w którym skończyło się wykonywanie.

tym sposobem omówiłem wszystkie komendy (oprócz subów, czyli sub oraz gosub), które zaliczane są do grupy komend zwanej "Flow Control". Nie wiem jak dobrze przetłumaczyć na język polski tą frazę, gdyż przepływ kontroli ani kontrola przepływu jakoś do mnie nie przemawiają.

Jeżeli chcesz, możesz poczytać w dokumentacji angielskiej. Z tego co własnie patrze, niestety dokumentacja Polska nie obejmuje tego fragmentu.

I jeszcze raz zachęcam wszystkich czytających tego bloga do pisania komentarzy oraz pytania, gdy coś jest niezrozumiałe.

1 komentarz:

  1. szkoda ze nie opisales w koncu subow i nie wdrazyles sie w find id bardziej. duzo ludzi to czyta a widze ze nikt nie komentuje

    OdpowiedzUsuń