Niedawno Microsoft wypuścił bardzo interesującą bibliotekę: CLR Memory Diagnostics (w skrócie: ClrMD). Cudeńko to daje nam do rąk niemałą władzę: możemy z jej pomocą podpiąć się z kodu pod dowolny proces .NET i odczytać z niego masę interesujących informacji (jak chociażby wszystko co chcielibyśmy wiedzieć o aktualnym stanie sterty – Heap).
Gdyby tego było mało, w ten sam sposób możemy z kodu analizować crash dumpy.
Jeśli ktoś zna, używa i uwielba SOS.dll (SOS Debugging Extension) to pewnie właśnie trochę popuścił z ekscytacji. A jeśli ktoś nie używa to odsyłam chociażby do Michała czy Pawła, można u nich czasem poczytać o ciekawych low-levelowych mechanizmach w tym temacie.
Nie wysilając się na dodatkowe zbędne literackie wygibasy odsyłam do posta źródłowego na MSDN: .NET Crash Dump and Live Process Inspection.
A tak jeszcze na marginesie: to wszystko mamy na wyciągnięcie ręki prosto z konsoli dzięki ScriptCS (o którym pisałem jakiś czas temu) i jego REPL dla C#. Projekt, który to umożliwia, zwie się ScriptCs.ClrDiagnostics a jego “intro blog post” można przeczytać tutaj: CLR Diagnostics with ClrMD and ScriptCS REPL – ScriptCS.ClrDiagnostics. Historia dzieje się na naszych oczach:).
Long time ago in a city far far away… no dobra nei tak dawno i nie tak deleko – chyba w 2008 na C2C Ingo Rammer miał fajną prezentację: “Hardcore production debugging in .NET” – niestety nie widze na szybko w google dostępnej jej online ale IMHO dla zainteresowanych warto poszukać. (można zacząć tu: http://osherove.com/blog/2010/6/1/video-hardcore-production-debugging-in-net-ingo-rammer.html )
Mirosław,
To była edycja 2009 i sesja faktycznie mega-przednia:) aż wróciłem na chwilę do swojej relacji żeby sobie przypomnieć: http://www.maciejaniserowicz.com/2009/03/16/relacja-z-c2c-communities-to-communities-2009/
Wednewsday: analiza crash dumpów i procesów .NET na żywca z kodu | Maciej Aniserowicz o programowaniu…
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl…
Maciek, wielkie dzięki za to info, sam właśnie piszę własny interpreter dumpów i taki projekt spada mi niemalże z nieba :) Oczywiście Microsoft.Diagnostics.Runtime opakowuje i korzysta z COMów z dbgeng i dbghlp, ale do tej pory właściwie nie było innej opcji jak tylko pisanie w c++, a teraz wszystko jest podane ‘na tacy’, tylko brać!
@Mirek: Odnośnie prezentacji Ingo, to mam ją gdzieś na dysku, więc w razie co wiesz gdzie mnie znaleźć :)
Michał