WinDbg jest narzędziem które każdy programista .NET powinien znać – przynajmniej z nazwy, chociaż dochodzę do wniosku, że także do prostego wykrozystania (odpalenia, i wykonania kilku komend). I taką wiedzę powinien raz na jakiś czas sobie odnawiać. Nie jest to jednak łatwe, czasami przerwy pomiędzy kolejnymi podejściami są tak duże, że zaczynamy wszystko od reaserchu zarówno googlowego jak i pewnie swoich notatek (jeżeli je mamy).
Wiedza jakie komendy kiedy wykorzystać jest dość kluczowa, zarówno dla nowych użytkowników, tych powracających jak i tych którzy uczą narzędza WinDbg. A gdyby tak dało się to trochę ułatwić?
Nie wszyscy raczej wiedzą, że istnieje opcja stworzenia interaktywnych komend, które można w prosty sposób wykorzystać zarówno podczas nauki, przypomnienia jak i jako narzędzie do nauki.
Drzewo komend
WindDbg dostarcza komendę .cmdtree która rozumie określony format pliku i daje nam, użytkownikom końcowym interaktywne okno w którym możemy za pomocą dwu klika wykonać określoną akcję, która jest dość ładnie nazwana.
Format takiego pliku jest dość… prosty i wygląda on tak:
windbg ANSI Command Tree 1.0 title {"My Cheat Sheet"} body {"Common Commands"} {"Information"} {"Time of dump"} {".time"} {"Modules"} {"All Modules"} {"lm D sm"} {"Memory"} {"Dump heaps"} {"!heap -a"} {"Automated Task"} {"!analyze"} {"!analyze -v"} {"Locks"} {"!ntsdexts.locks"} {"CPU time for User and Kernel Mode"} {"!runaway 7"} {".NET"} {"Load sos and sosex"} {".loadby sos mscorwks;.load sosex"} {"clrstack"} {"!clrstack"} {"Threads"} {"!threads"} {"Stack Objects"} {"!dso"} {"Exceptions"} {"!dae"}
Gdzie pierwsze trzy linijki powinny być tak jak są podane (może być jeszcze wersja 1.1) z tą różnicą iż tytuł można zmienić, zaś reszta jest prostym podziałem klucz/wartość, przy czym, klucz bez wartości staję się grupą w drzewie – przy tym ważne by elementy do niego należące były pod nim za pomocą spacji.
W WinDbg nasze drzewo komend będzie wyglądało tak:
Dodatkowo jak widać na przykładzie Load sos and sosex
możemy łączyć komendy :)
Tak stworzony plik możemy otworzyć na dwa sposoby z WinDbg.
W trakcie trwania sesji debugującej
By otworzyć plik wystarczy wykonać komendę:
.cmdtree nazwapliku.rozszerzenie
Lub
.cmdtree X:\ścieżka_do_pliku\plik.rozszerzenie
Jeżeli nie podajemy ścieżki, plik będzie wzięty z katalogu Debuggers
(katalog instalacyjny WinDbg, w którym znajdują się głównie katalogi w tym x86
czy x64
).
Podczas odpalania WinDbg
Możemy także podać ścieżkę do pliku cmdtree
w trakcie uruchamiania debuggera (przy czym okno komend pokaże się dopiero wtedy kiedy rozpoczniemy sesję debugującą):
windbg.exe -c ".cmdtree X:\my_commands.txt"
Podsumowanie
Wygląda na to, że właśnie trafiło w moje ręce super narzędzie z którego na pewno będę korzystał. Bo mimo notatek zawsze mam kłopot jak siadam po jakimś czasie do narzędzia:)
Znaliście tą sztuczkę? Ktoś z niej korzystał? :)