Wiki

Clone wiki

SOSNet / Home

SOSNET

For more information about SOS commands, go here.

What is it?

SOSNet is a WinDBG fork, using massively the extension of SOS and SOSEX which extend the features of WinDBG for .Net.

For who really don't know what WinDBG is: it allows you to attach to your program (or read a memory dump) so you can browse the memory for troubleshooting. Then you can verify if you're consuming too much of memory (check the number of instances of a type, of the size of an array, etc). You can verify the stack too, so you can check how many threads do you use, or detect interlocking.

How it works?

SOSNET is using the "command line" version of WinDBG: CDBG. You can still use command lines in SOSNET for non implemented features.

SOSNET command line

But the main point is that SOSNET analyze the CDBG output to display data in a better way. So you can "double-click" on pointers to see what it represents:

  • double click on a type to display all instances
  • double click on an instance to display details of it (fields with type and value)
  • double click on a "reference" field to display the value of it
  • navigate through instances, fields and arrays, and go back thanks to a breadcrumb
  • etc.

Navigate through objects in memory

How to "install" it?

You can compile the sources yourself ;) or download a release from the download page.

Before running SOSNET, you needs to install WinDBG from the Microsoft web site. Be sure to choose the correct version (32bits or 64bits).

Then, you can just unzip the SOSNET archive, and launch the program.

Oh, and you need to install .Net too of course :) The SOS dll is included in the .Net framework.

Some features are using SOSEX, but it's not mandatory. You can download SOSEX from the author's web site.

How to use it?

First, run you .Net program: it must not be attached with another debugger. You can refresh the list of processes in the first tab: The list of processes

You can filter processes thanks to the "search" field. When you selected you program, click "attach" or simply double-click on it: Now you're attached in debug mode! The program is "paused" so you can't do anything with it. You understand why to not attach to SOSNET it self ;)

Then you can browse AppDomains, and double-click on one of them to see the assemblies loaded: The list of AppDomains The list of Assemblies

You can also display the list of all .Net types loaded in memory (with at least one instance) and filter them: The list of Types

When you double-click on a type, you can see the list of all instances. When you double-click on the instance, you can see the details of it: fields with types and value.

Details of an instance

If the field is a reference type (pointer) you can double-click on it to display the details.

Details of a field

You can go back to the parent object thanks to the breadcrumb. If the field is an array, it prompts you the list of indexes of the array, to display one of the item.

Details of an array field

Each commands you do (by double clicking or refreshing data) are logged in the command line tab. You can use it to use SOS/SOSEX commands which are not handled in the SOSNET UI.

CBDG command line

Now have fun :)

Updated