BT
x Your opinion matters! Please fill in the InfoQ Survey about your reading habits!

CLR Memory Diagnostics Enables you to Automate Inspection Tasks

by Anand Narayanaswamy on Jun 10, 2013 |

Microsoft recently released Microsoft.Diagnostics.Runtime component shortly called as ClrMD via the NuGet Package Manager that allows you to automate inspection tasks and access even more debugging information. It is a set of advanced APIs for programmatically inspecting a crash dump of a .NET program much in the same way as the SOS Debugging Extensions (SOS.dll) and it provides you an ability to write automated crash analysis for your applications and automate many common debugger tasks.

In order to work with ClrMD component, you need to create an instance of DataTarget class, which represents either a crash dump or a live .NET process. After that you have to call TryGetDacLocation() method that attempts to find a matching DAC on the same machine. However, you can also copy the DAC from a machine where a matching CLR is installed if you need to inspect a process for which you do not have a matching CLR by providing the path to the alternate mscordacwks.dll to the CreateRuntime() method manually.

You can then make use of the runtime object to inspect the contents of the GC heap which produces an output as shown below

23B1D30       36 System.Security.PermissionSet
23B1D54       20 Microsoft.Win32.SafeHandles.SafePEFileHandle
23B1D68       32 System.Security.Policy.PEFileEvidenceFactory
23B1D88       40 System.Security.Policy.Evidence

You now have the required data to output a set of heap statistics that can be done by using a LINQ query to group the heap by type and sort by total object size. The resulting output will look like as shown below

564           11 System.Int32[]
616           2 System.Globalization.CultureData
680           18 System.String[]
728           26 System.RuntimeType
790           7 System.Char[]
5,788         165 System.String
17,252        6 System.Object[]

ClrMD also enables you to retrieve general information about the GC heap, walks the CLRs handle table, application domains in the process and identifies which modules are loaded into them. It also enumerates threads, callstacks of those threads, the last thrown exception on threads and object roots of the process in addition to gathering of data about the various heaps that the .NET runtime make use of. The IntelliSense included with the ClrMD package component enables you to explore the various complicated properties and functions.

In addition to the above features, ClrThread object also contains a CurrentException property whuch may be null and contains the full stack trace, message and type of the exception thrown. If not null then it will contain the last thrown exception on this thread.

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT