Postanowiłem napisać kilka postów, które odkrywają “nieznane” funkcje Visual Studio. Dziś jeden z nich.
Czasem widzę, że największą furorę robią posty opisujące rzeczy (dla mnie) oczywiste. Okazuje się, jednak, że to co jest znane mnie, niekoniecznie jest wiedzą dość dobrze rozpowszechnioną. Zaczynamy zatem.

Analiza dumpów

Jeszcze do wersji 2008 ta funkcjonalność zarezerwowana była tylko dla świetnego narzędzia jakimi jest WinDbg. Jednakże od wersji 2010 VisualStudio potrafi odczytać i przeanalizować pliki *.dmp czyli zrzuty pamięci.
dump
Za pomocą polecenia Open możemy wczytać taki plik i wyświetlić jego zawartość. Co więcej VisualStudio w ładny sposób potrafi pokazać nam, gdzie nasz program znajdował się w momencie wykonania zrzutu pamięci. Wystarczy, po załadowaniu pliku dumpa, wybrać opcję ‘Debug with managed’ (bądź native – w zależności od potrzeb) a następnie skorzystać z opcji Parallel Stacks. Dzięki temu naszym oczom ukaże się ładny stan aplikacji w momencie zrzutu.
stacks
Teraz już bez problemu będziemy mogli znaleźć wątki naszej aplikacji i zobaczyć, że tak na prawdę dwa z nich próbują wstawiać elementy do tego samego słownika powodując wyjątek.
threads

Wcześniej, aby osiągnąć te rezultaty trzeba było analizować zrzut pamięci w WinDbg, co dla niektórych stanowiło barierę przed tego typu analizami. Co prawda WinDbg wspiera nas poleceniami typu !analyze –v –hang ale mimo to niewiele osób to robiło w jakikolwiek sposób.
analyze
Dodatkowo po załadowaniu SOS (.loadby sos clr) a potem po !DumpStack –short możemy zauważyć, że wątki 32 oraz 34 siedzą w tej samej metodzie a mianowicie Dictionary.Insert wywołanej w tym samym miejscu.
dict_insert
No więc mamy to samo co udostępnia teraz VisualStudio. Miłego analizowania zrzutów.