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.
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.
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.
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.
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.
No więc mamy to samo co udostępnia teraz VisualStudio. Miłego analizowania zrzutów.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl