During development phase of my current project I try to figure out if my application has memory leaks. The client where I am working prevent me from installing software on my development computer. I don’t have installed Microsoft Windows SDK, so I cannot use WinDBG. This article is a quick post to introduce Visual Studio 2010 and sos.dll
Project configuration
Before starting your application, on the project properties> Debug tab, make sure that “Enable unmanaged code debugging” is enabled.
Starting analyzing
Start your debugging your application, execute the scenario where you found that there is a memory leak, break at the end of this execution (Break All or CTRL+ALT+DEL).
In Visual Studio, Open the immediate windows and load sos.dll.
For .net 4.0 application:
.load C:\windows\Microsoft.NET\Framework\v4.0.30319\sos.dll
or
.load sos
For .net 2.0, 3.0 or 3.5 application:
.load C:\windows\Microsoft.NET\Framework\v2.0.50727\sos.dll
Enter the following command line to get the summary of object types that are still in memory:
!dumpheap –stat
If one of the type should not be in memory, you can filter for a specific type:
!dump –type MyNamespace.MyType
This lists all objects of this specific type in the heap. Once you have the address of one specific object you can get a dump of a specific object:
!gcroot 02369d30
This dump lists all the objects that references, and that forces the object to be kept in the heap. After you should investigate deeper ![]()
Main commands to use
| Command | Comment |
!dumpheap –stat |
Summary of classes |
| MyNamespace.MyType | Lists all objects in the heap of this specific type |
!gcroot 02369d30 |
Returns the ump of a specific object |
Interesting links
MSDN reference : https://msdn.microsoft.com/fr-fr/library/bb190764.aspx
Tess Ferrandez blog: https://blogs.msdn.com/b/tess/ (very interesting blog). She wrote several good post but also one dedicated on “Debugging Silverlight applications with windbg and sos.dll”