Debugowanie w Visual Studio

Ostatnio widzę dużo wpisów na temat debugowania aplikacji. Nie trafiłem jednak na opis dwóch rzeczy, które bardzo tą czynność ułatwiają, mianowicie, zmiana kolejności wykonywania kodu oraz GetHashCode()

Zmiana kolejności wykonywania kodu

Czy zdarzyło Ci się podczas debugowania przejechać o tą jedną linijkę za daleko? Nic prostszego, chwyć żółtą strzałkę i przesuń kilka linijek do tyłu i wykonaj kod jeszcze raz. To jest tak proste, że aż niebywałe, że niektórzy o tym nie wiedzą. Teraz już wiecie.

vsdebugger.gif

Możemy przesuwać się na początek i na koniec funkcji, do przodu i do tyłu. Krok dalej to w przypadku wyjątku, który zatrzymał nam program, możemy przenieść się na koniec funkcji, wyjść z niej, cofnąć się linijkę do góry (w kawałku kodu, który tą funkcję wywołał) i wywołać jeszcze raz, próbując zrozumieć dlaczego program “się sypnął”. Dzięki czemu nie trzeba restartować aplikacji i przeklikiwać się. Rozwinięciem tego jest możliwość edycji kodu w trakcie debugowania. Szczęśliwcy z VS2008 (bodajże) na maszynach 32bit mogą to robić od dawna. Jeśli używacie x64 to dopiero VS2013 pozwala modyfikować kod w locie. Świetna sprawa, oszczędza sporo czasu (chociaż ma swoje ograniczenia).

GetHashCode()

GetHashCode to funkcja, któraz zwraca nam unikalny (teoretycznie) identyfikator obiektu. Do czego to może być przydatne przy debugowaniu? Ano czasem jest tak, że kod robi coś dziwnego i za bardzo nie wiadomo dlaczego, bo niby jest ok ale działa dziwacznie. I jak już wszystko zawiedzie, to okazuje się, że warto sprawdzać Hash obiektów, bo może się okazać, że w jednej części aplikacji mamy jeden obiekt a w innej części drugi obiekt mimo tego, że myślimy, że to ten sam. Sam więcej niż raz wpadłem w taką pułapkę, że myślałem, że mam do czynienia z  jakimś obiektem danej klasy, a okazywało się, że gdzieś po drodze się podpinała inna instancja i tak naprawdę miałem te same dane ale inne referencje wewnątrz i koniec końców program działał trochę inaczej. Mi najwygodniej użyć do tego Immediate Window (ALT+CTRL+I) i po prostu klepię ?  nazwaZmiennej.GetHashCode(). Proste jak budowa cepa a bardzo skuteczne, zadziwiająco skuteczne.

Dając Ci te dwa (nowe) narzędzia, życzę owocnych łowów.