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:

WinDbg CmdTree
WinDbg CmdTree

Dodatkowo jak widać na przykładzie Load sos and sosex możemy łączyć komendy :)

WinDbg CmdTree - łączenie komend
WinDbg CmdTree – łączenie komend

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ł? :)