For more information about SOS commands, go here.
What is it?
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.
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
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:
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:
You can also display the list of all .Net types loaded in memory (with at least one instance) and filter them:
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.
If the field is a reference type (pointer) you can double-click on it to display the details.
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.
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.
Now have fun :)