23.04.2012 17:35
Debugowanie po stronie użytkownika [podstawowy]
Debugowanie to potoczna nazwa procesu usuwania błędów (lub po prostu nie pożądanego działania) z kodu źródłowego. Programując w Flash Professional lub FlashDevelop mamy dostęp do narzędzie debuggera które swoją rolę sprawuje całkiem nieźle i na pewno nie jednej osobie pomogło już usunąć błędy we własnych projektach. Niestety debugger jest narzędziem dostępnym jedynie twórcom aplikacji którzy jednak nie zawsze są w stanie przewidzieć (i sprawdzić) wszystkie możliwe scenariusze działania które podejmie docelowy odbiorca. Dlatego dla pewności zawsze warto zaimplementować system wyłapywania błędów od strony korzystających z aplikacji użytkowników - w tym celu przyjrzymy się kilku najpopularniejszym mechanizmom.
1. Główna pętla.
Ten, zdawać by się mogło, trywialny element powinien być częścią każdej szanującej się aplikacji i to nie tylko dlatego, że ułatwia debugowanie ale również czyni kod przejrzystszym i mniej podatnym na wycieki pamięci. Ale czym właściwie jest "główna pętla"? We Flash'u sprowadza się do posiadania tylko JEDNEGO zdarzenia "ENTER_FRAME" w całej aplikacji, co oznacza, że wszystkie inny wykonywane funkcja będą wywodzić się bezpośrednio (lub pośrednio) z głównej pętli. Takie podejście ułatwia wyłapywanie błędów w nieporównywalnym stopniu bo wystarczy, że kod głównej pętli obejmiemy słowami kluczowymi try i catch, a już żaden wyrzucony Error nie umknie naszej uwadze. Główna pętla z try i catch może wyglądać na przykład tak:
Chociaż wyłapywanie błędów jest bardzo ważne, to jednak samo w sobie może okazać się mniej istotne niż na przykład okoliczności w których doszło do wyrzucenia wyjątku, dlatego drugim bardzo ważnym elementem każdej aplikacji powinien być dziennik zapisujący wykonywanie wszystkich kluczowych funkcji przez użytkownika - w jakim stanie rozpoczął korzystanie z aplikacji (wersja Flash, system operacyjny itd.), jakich przycisków używał, przez jakie okienka przeszedł itp. A jeśli będzie to gra, to na pewno na jakiej jest mapie, w jakiej jest pozycji i z czym miał już do czynienia. Przechowując wszystkie te informacji łatwiej będzie nam odtworzyć warunki w jakich użytkownik otrzymał błąd.
Klasa dziennika jest zawsze najprostszym elementem do zaimplementowania:
Chyba każdy gracz chociaż raz korzystał z konsoli w grach PC, choćby po to żeby sobie wpisać "kody na nieśmiertelność". Konsola to potoczne określenie (zwykle ukrytej) linii komend w aplikacji, pozwalająca użytkownikowi wymusić działanie pewnych, z góry ustalonych funkcji. Zaimplementowanie dobrej konsoli to już nieco roboty, na szczęście w Internecie można znaleźć sporo gotowych rozwiązań, jak na przykład: Flash Console. Zdecydowanie każdy powinien mieć linie komend w swojej aplikacji - jeden raz wystarczy by już na zawsze się w niech zakochać. Na koniec gdy nasza aplikacja jest już gotowa, warto w głównej pętli pozbyć się funkcji trace i zastąpić ją czymś co pozwoli nam otrzymać informacje o ewentualnych błędach, na przykład wysyłając je sobie na e-mail.
Ten, zdawać by się mogło, trywialny element powinien być częścią każdej szanującej się aplikacji i to nie tylko dlatego, że ułatwia debugowanie ale również czyni kod przejrzystszym i mniej podatnym na wycieki pamięci. Ale czym właściwie jest "główna pętla"? We Flash'u sprowadza się do posiadania tylko JEDNEGO zdarzenia "ENTER_FRAME" w całej aplikacji, co oznacza, że wszystkie inny wykonywane funkcja będą wywodzić się bezpośrednio (lub pośrednio) z głównej pętli. Takie podejście ułatwia wyłapywanie błędów w nieporównywalnym stopniu bo wystarczy, że kod głównej pętli obejmiemy słowami kluczowymi try i catch, a już żaden wyrzucony Error nie umknie naszej uwadze. Główna pętla z try i catch może wyglądać na przykład tak:
public function render(e:Event):void { try { processPlayer(); processEnemy(); processMap(); } catch(e:Error) { trace("Error!"); } }2. Dziennik.
Chociaż wyłapywanie błędów jest bardzo ważne, to jednak samo w sobie może okazać się mniej istotne niż na przykład okoliczności w których doszło do wyrzucenia wyjątku, dlatego drugim bardzo ważnym elementem każdej aplikacji powinien być dziennik zapisujący wykonywanie wszystkich kluczowych funkcji przez użytkownika - w jakim stanie rozpoczął korzystanie z aplikacji (wersja Flash, system operacyjny itd.), jakich przycisków używał, przez jakie okienka przeszedł itp. A jeśli będzie to gra, to na pewno na jakiej jest mapie, w jakiej jest pozycji i z czym miał już do czynienia. Przechowując wszystkie te informacji łatwiej będzie nam odtworzyć warunki w jakich użytkownik otrzymał błąd.
Klasa dziennika jest zawsze najprostszym elementem do zaimplementowania:
public class Log { private static var log:String = ""; public function Log() {} public static function add(s:String):void { log += s+"n"; } public static function toClipboard():void { System.setClipboard(log); } }3. Konsola.
Chyba każdy gracz chociaż raz korzystał z konsoli w grach PC, choćby po to żeby sobie wpisać "kody na nieśmiertelność". Konsola to potoczne określenie (zwykle ukrytej) linii komend w aplikacji, pozwalająca użytkownikowi wymusić działanie pewnych, z góry ustalonych funkcji. Zaimplementowanie dobrej konsoli to już nieco roboty, na szczęście w Internecie można znaleźć sporo gotowych rozwiązań, jak na przykład: Flash Console. Zdecydowanie każdy powinien mieć linie komend w swojej aplikacji - jeden raz wystarczy by już na zawsze się w niech zakochać. Na koniec gdy nasza aplikacja jest już gotowa, warto w głównej pętli pozbyć się funkcji trace i zastąpić ją czymś co pozwoli nam otrzymać informacje o ewentualnych błędach, na przykład wysyłając je sobie na e-mail.