niedziela, 13 marca 2011

Debugger ważna rzecz

Debugger jest niezwykle przydatnym narzędziem w czasie programowania (z czym myślę, że każdy się zgadza). Jak sama nazwa wskazuje pozwala on wychwycić błędu (te z gatunku trudnych do odnalezienia). Oczywiście w wypadku braku debuggera zawsze można wypisywać komunikaty na standardowe wyjście, jednak jest to metoda niewygodna i znacznie bardziej czasochłonna.

Oczywiście debugger debuggerowi nie równy i jego integracja z naszym IDE może być różne. Co powinien obsługiwać dobry denugger? Moim zdaniem będzie to:
  • Callstack - niezwykle przydatne gdy program się wysypuje i chcemy zorientować się dokładnie w jakiej sytuacji.
  • Podglądanie zawartości dowolnej zmiennej - najlepiej mocno zintegrowane z IDE aby można było najechać kursorem na zmienną w kodzie i sprawdzić jej obecną wartość.
  • Możliwość odpalenaia programu krok po kroku - to jest standard i ma to chyba każdy debugger
  • "Ładne" formatowanie dla kontenerów STL - chodzi o to aby z punktu widzenia debuggera patrzeć na taki kontener jak np. tablicę.
  • Breakpointy normalne i warunkowe - tak jak normalne są w każdym IDE ze zintegrowanym debuggerem tak warunkowe (niezwykle przydatne) już nie
To chyba są te najważniejsze cechy aby debugowanie było wygodne i pozwalało na wyszukiwanie błędów.

A teraz sytuacja z życia. Ostatnio pisałem program w QT Creatorze (dokładniej to program na zajęcia, pisałem w QT Creatorze bo miałem potem dodać to tego GUI) i napotkałem na dziwną sytuację. Myślę, że mogło to być spowodowane tym, że dane miałem na sztywno w programie ale do sytuacji. Mój program rzucał w pewnym momencie wyjątkiem i kończył działanie, standard można powiedzieć (wyjątek rzucany przez kontener STL). Oczywiście debugowałem program i okazało się, że... wyjątek rzucany jest jeszcze przed funkcją main, callstack pokazuje tylko elementy systemu operacyjnego, ogólnie coś jest nie tak bo poza main miałem tylko funkcje i tablice obiektów prostych. W końcu postanowiłem zobaczyć co mi powie Visual Studio i okazało się, że tam błąd jest w funkcji wywoływanej z main (który zresztą w ciągu chwili naprawiłem, bez debuggera bym go nie znalazł za szybko). I tak debugger uratował dzień. Co do samego debuggera w środowisku QT to nie jestem pewien co było przyczyną jego zachowania, podejrzewam, że kompilator zoptymalizował kod pomimo  konfiguracji debug.

Tak na koniec o tym, że debugger jest niezwykle przydatny dowiedziałem się gdy przesiadłem się z Dev-C++ na Visual Studio. Umiejętność debugowania jest niezwykle ważna w programowaniu i osobiście zauważyłem to u osób które pisały w Dev-C++, że nie potrafią debugować przez co nie radzą sobie z błędami.

Brak komentarzy: