I've finally gotten around to updating SOSEX. I incorporated most of the feedback I received and I added a couple of other new goodies. Here's what's new:
Added support for inspecting variables in frames other than the current frame. By passing a frame index (eg. !vars 3), you can inspect the variables in any single frame in the call stack. By passing the -w switch (!vars -w), the command will walk the stack all the way up, dumping args/locals for each managed frame. This was the number one requested improvement for sosex.
New command. Pass the address of a System.DateTime Value Type and the date will be displayed in a human readable format (yyyy/mm/dd HH:mm:ss.zzz)
This was another popular feature request.
Added detection capability for cases where a deadlock is caused by a dead thread holding a lock.
In v1.0, there was a bug that caused only the first instance of a generic method to receive the breakpoint. This is now fixed so that all generic instances get the breakpoint as expected.
Added -c switch to allow viewing of the static variable in the current context only. Without the switch, the state of the static field is displayed for all AppDomains/Threads.
Value Type display:
I also improved the display of value types. When !isf or !vars show a value type, SOSEX indicates a value type using a "VALUETYPE" indicator along with a "MT" (method table address) and "ADDR" (value type start address) indicator to facilitate dumping the data with the SOS!dumpvc command. This provides a big advantage over SOS and v1.0 of SOSEX, because they simply display the first 4 bytes of the value type data, with no VT indication or MT info.
As always, feel free to contact me or leave comments to this post with any bug reports or feature requests.
Download: x86 | x64