W poprzednim wpisie pokazaliśmy sobie jak możemy zmusić Visual Studio do zdalnego debuggowania naszej aplikacji na produkcji. W tym wpisie przyjrzymy się MDbg. MDbg – to prosty, konsolowy debugger przeznaczony do śledzenia kodu aplikacji zarządzanych (tylko i wyłącznie – nie ma wsparcia dla aplikacji natywnych).
MDbg jest częścią instalacji Visual Studio lub Windows SDK. Działa także bez instalacji, tak więc możemy go nagrać na przenośną pamięć i nosić ze sobą w razie potrzeby. Poniżej Mdbg w działaniu – lista komend.

mdbg
Jak zacząć z nim pracę? Po uruchomieniu należy podpiąć się pod nasz proces. Wykorzystujemy do tego polecenie           (a[ttach]). Jeśli uruchomimy ją bez podania PID procesu MDbg wypisze nam wszystkie procesy zarządzane, aktualnie uruchomione. Następnie pozostaje już tylko dotrzeć do interesujących nas fragmentów aplikacji. Możemy do tego użyć takich poleceń jak: w[here] – drukuje stos wywołań, b[reak] – wyświetla/ustawia pułapki, u[p]/d[own] x – ustawia aktywną ramkę stosu (można podać o ile ma się przenieść), sh[ow] – wyświetla kod źródłowy w obrębie aktywnej instrukcji.
Zobaczymy jak z jego pomocą możemy zdiagnozować problem w aplikacji (choć w tym przypadku chyba łatwiej po prostu zerknąć na nią w Reflector’ze – tu jednak w celach pokazowych użyjemy MDbg).
Dostaliśmy informację, że nasza super inteligentna aplikacja licząca silnię działa czasami niepoprawnie. Widzimy wyniki: 5! – 120, 8! – 40320, 10! – 20922789888000. Trochę za dużo. Tak więc działamy: a 1416 i podpinamy się do naszego procesu. Za pomocą where zobaczymy stack trace i widzimy, że aplikacja czeka na wprowadzenie danych. Następnie up 5 – przechodzimy do kodu naszej aplikacji. Wtedy już tylko sh 10 – wyświetlamy 10 linijek kodu i widzimy interesujący fragment.

int num = int.Parse(input, System.Globalization.NumberStyles.HexNumber);
Console.WriteLine(Fac(num));

Widzimy więc, że nasz programista parsuje sobie liczby jako hex, dlatego wprowadzając 10 tak na prawdę liczmy 16!. Sprawdźmy… Uruchamiamy aplikację dalej (g) i wprowadzamy wartość ‘a’. Ukazuje nam się wynik 3628800 czyli poprawny.
Na koniec mała uwaga. Mdbg został napisany w kodzie zarządzanym i jeśli kogoś to interesuje to może sobie podejrzeć za pomocą Reflector’a jak wygląda kod tej aplikacji. Zachęcam.
W następnym wpisie (mam nadzieję, że tyle nie trzeba będzie na niego czekać) WinDbg.
Miłego debuggowania!