The following example demonstrates how to dump the target object of a WeakReference.
1. Find WeakReference’s object address. In my example it is 0bb9a878.
2. Use !dumpobj to print content of the WeakReference:
0:025> !dumpobj 0bb9a878
Name: System.WeakReference
MethodTable: 5ec0d7ec
EEClass: 5e7eacd8
Size: 16(0x10) bytes
File: C:\Program Files\Microsoft Silverlight\4.0.50524.0\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
5ec0c5a0 4000522 4 System.IntPtr 1 instance 7631528 m_handle
5ec007e4 4000523 8 System.Boolean 1 instance 0 m_IsLongReference
3. The m_handle member is a pointer to the target object. The member is value type (System.IntPtr), so we use !dumpvc command to print its content:
0:025> !dumpvc 5ec0c5a0 7631528
Name: System.IntPtr
MethodTable: 5ec0c5a0
EEClass: 5e7e9f00
Size: 12(0xc) bytes
File: C:\Program Files\Microsoft Silverlight\4.0.50524.0\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
5ec0d720 4000353 0 PTR 0 instance 0bb9a86c m_value
5ec0c5a0 4000354 50c System.IntPtr 1 shared static Zero
>> Domain:Value 0b670f20:NotInit 0b675a40:NotInit <<
4. The address of the target object is 0bb9a86c. Now we can use !dumpobj command to print it:
0:025> !dumpobj 0bb9a86c
Name: HelloSl.FooBar
MethodTable: 07625428
EEClass: 07621cd8
Size: 12(0xc) bytes
File: HelloSl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Fields:
None