dnSpy – debugowanie aplikacji bez kodu

Wprowadzenie

Zapewne nie raz miałeś(-łaś) tak, że aplikacja na produkcji, u klienta lub serwerze testowym działa inaczej, niż powinna. A to pojawia się jakiś wyjątek, a to wynik operacji jest inny, niż powinien być. Znając życie, w logach nic ciekawego nie było i przez dłuższy czas dodawałeś(-łaś) do nich kolejne linijki w pogoni za błędem. Myślę, że każdy z nas miał wcześniej czy później podobny problem.

Nie raz przemknęło Ci przez myśl, by zainstalować Visual Studio, aby zdebugować problem, w szczególności gdy Remote Debugger nie działał. Na szczęście mamy inną opcje, którą można wykorzystać. Jest nią darmowa aplikacja dnSpy, o której w dzisiejszym wpisie.

dnSpy

dnSpy (https://github.com/0xd4d/dnSpy) jest jednym z narzędzi, które warto znać, bo bardzo przydaje się w różnych sytuacjach (między innymi w tej opisanej we wstępie).

Po pierwsze, umożliwia zdekompilowanie kodu. Pod spodem wykorzystuje ILSpy, za pomocą którego możemy zobaczyć kod aplikacji. dnSpy nawet ładnie koloruje składnię:

dnspy wpf application

Powyżej znajduje się zdekompilowany kod testowej aplikacji WPF z wpisu o walidacji danych z wykorzystaniem Fluent Validation w WPF. Oczywiście kod jest trochę inny niż ten, z którego aplikacja została skompilowana, ale na ogół nie ma większego problemu z jego zrozumieniem i analizą. Poniżej znajduje się kod viewmodelu z powyższego zrzutu ekranu:

dnspy wpf application source code

W przypadku używania jakiegoś zaciemniania kodu jego analiza w dnSpy na ogół jest niemożliwa.

Darmowy kurs Visual Studio

Pracując z setkami programistów, zauważyłem, że większość osób nie pracuje efektywnie w Visual Studio. W skrajnych przypadkach korzystali z kopiowania z wykorzystaniem menu Edit. Wiem, że to dziwne, ale naprawdę niektórzy tak pracują. Dlatego postanowiłem stworzyć kurs Visual Studio – aby pomóc koleżankom i kolegom w efektywniejszej pracy.

Przygotowałem 20 lekcji e-mail, w których pokażę Ci, w jaki sposób pracować efektywniej i szybciej w Visual Studio. Poznasz dodatki, bez których nie wyobrażam sobie pracy w tym IDE.

Po więcej informacji zapraszam na dedykowaną stronę kursu: Darmowy Kurs Visual Studio.

Quiz C#

Ostatnio przygotowałem również quiz C#, w którym możesz sprawdzić swoją wiedzę. Podejmiesz wyzwanie?

Debugowanie aplikacji

Po drugie, możemy debugować aplikację. Myślę, że jest to najfajniejszą opcją w dnSpy, z której wielokrotnie korzystałem. Nie potrzebujemy dostępu do kodu aplikacji, a ponadto możemy wykonać go sobie linijka po linijce, podobnie jak w Visual Studio. Możemy uruchomić nowy proces aplikacji lub podpiąć się pod istniejący (np. proces w3p). Dodatkowo domyślne skróty są takie same jak w Visual Studio:

dnspy start debugging

Normalnie stawiamy breakpointy, a następnie wykonujemy kod linijka po linijce. Również tutaj skróty klawiszowe są takie same jak w Visual Studio (nie znasz tych skrótów? Zapraszam do mojego darmowego kursu o Visual Studio). Na dole znajduje się okienko Locals z wartościami obiektów, zmiennych, parametrów:

dnspy debugging

Debugowanie aplikacji w dnSpy jest dużo mniej rozbudowane niż w Visual Studio. Na tyle jednak wystarczające, że spokojnie możemy znaleźć problem dużo sprawniej i efektywniej, niż korzystając z wybrakowanych logów.

Oczywiście musimy pamiętać, że w przypadku debugowania produkcji cała aplikacja zostaje zatrzymana, co prawdopodobnie w większości przypadków jest niedopuszczalne. Wtedy trzeba skorzystać z jakiegoś innego mechanizmu do szukania błędu w aplikacji.

Co jeszcze?

dnSpy ma jeszcze kilka innych funkcjonalności, które mogą Ci się przydać, choć ja z nich korzystam dużo rzadziej.

Możesz między innymi modyfikować kod assembly – na przykład zmieniać lub dodawać klasy, metody, właściwości itd.; również z prostym wsparciem Intellisense. Może się to przydać w sytuacji, gdy wdrożona wersja aplikacji ma jakiś głupi błąd (np. wywołujesz jakąś metodę z błędną wartością parametru). Zamiast wdrożyć całą aplikacje od nowa, co może trwać dłuższą chwilkę, możesz na szybko poprawić ten błąd w dnSpy i poczekać do nocy, gdy aplikacja jest mnie obciążona, z wrzuceniem poprawionej wersji.

Podobnie można to wykorzystać do szukania rozwiązania problemu. Zamiast zmieniać kod w Visual Studio i wrzucać go na serwer testowy, możesz na serwerze zmieniać kod do momentu znalezienia rozwiązania i dopiero później przenieść rozwiązanie do Visual Studio.

Lista wszystkich funkcjonalności dnSpy jest ładnie rozpisana na githubie projektu. Zachęcam do jej przejrzenia: https://github.com/0xd4d/dnSpy

Podsumowanie

dnSpy jest aplikacją, którą jako programista .NET powinieneś znać. W niektórych sytuacjach może znacznie ułatwić szukanie błędu w aplikacji, zwłaszcza w środowisku, w którym nie masz dostępu do Visual Studio. Dekompilacja kodu oraz możliwość jego debugowania bardzo się przydaje. A do tego jest możliwość zmiany kodu, która powoduje, że jesteś w stanie szybko naprawić jakiś problem bez konieczności czasochłonnego wdrażania nowej wersji aplikacji.

A możesz znasz jakieś inne tego typu narzędzie, które każdy programista .NET powinien znać? Podziel się nim w komentarzu!

1 thought on “dnSpy – debugowanie aplikacji bez kodu

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *