0:028> !do 0x05ba1ad4
Name: System.Collections.Hashtable
MethodTable 0x79bab93c
EEClass 0x79baba7c
Size 52(0x34) bytes
GC Generation: 2
mdToken: 0x02000118 (c:\windows\microsoft.net\framework
\v1.1.4322\mscorlib.dll)
FieldDesc*: 0x79babae0
MT Field Offset Type Attr
Value Name
0x79bab93c 0x400039e 0x4 CLASS instance
0x05ffdb08 buckets
0x79bab93c 0x400039f 0x1c System.Int32 instance 1865
count
0x79bab93c 0x40003a0 0x20 System.Int32 instance 470
occupancy
0x79bab93c 0x40003a1 0x24 System.Int32 instance 3499
loadsize
0x79bab93c 0x40003a2 0x28 System.Single instance 0.720000
loadFactor
0x79bab93c 0x40003a3 0x2c System.Int32 instance 3257
version
0x79bab93c 0x40003a4 0x8 CLASS instance
0x00000000 keys
0x79bab93c 0x40003a5 0xc CLASS instance
0x00000000 values
0x79bab93c 0x40003a6 0x10 CLASS instance
0x00000000 _hcp
0x79bab93c 0x40003a7 0x14 CLASS instance
0x00000000 _comparer
0x79bab93c 0x40003a8 0x18 CLASS instance
0x00000000 m_siInfo
0x79bab93c 0x400039d 0 CLASS shared static
primes
>> Domain:Value 0x00175700:0x05382c7c <<
0:028> !do -r 1 0x05ffdb08
Name: System.Collections.Hashtable/bucket[]
MethodTable 0x05272c28
EEClass 0x05272ba4
Size 58344(0xe3e8) bytes
GC Generation: 2
Array: Rank 1, Type VALUETYPE
Element Type: System.Collections.Hashtable/bucket
Content: 4,861 items
Thanks
Kjell Gunnar
In .NET 2.0 it could be done with '!da -details', but in .NET 1.x
it looks like I don't know other way than looking at the raw data.
This object (at 0x05ffdb08) is an array of value types, and thus it
should have the following layout:
- method table pointer (dword)
- number of elements in the array (dword)
- array elements follow; each 'bucket' element is 12 bytes long,
the first dword is a reference to the key object, and the second dword
is a reference to the value object. You can pass these two references
to !do to see the key and value of each item.
Oleg
0:028> dd 0x05ffdb08
05ffdb08 05272c28 000012fd 05f59e88 375ef39c
05ffdb18 2cf2870f 059178cc 2fd6945c e94e3dd0
05ffdb28 05f1b6b8 2482b86c 376aea96 00000000
05ffdb38 00000000 00000000 00000000 00000000
05ffdb48 00000000 00000000 00000000 00000000
05ffdb58 00000000 00000000 00000000 05f53be0
05ffdb68 34e31c90 37662b5b 00000000 00000000
05ffdb78 00000000 05f82d44 3e4bff7c e94bb83e
0:028> ? 12fd
Evaluate expression: 4861 = 000012fd
0:028> !do 05f59e88
Name: System.String
MethodTable 0x79b94638
EEClass 0x79b94984
Size 56(0x38) bytes
GC Generation: 2
mdToken: 0x0200000f (c:\windows\microsoft.net\framework
\v1.1.4322\mscorlib.dll)
String: 172.21.149.12:17365
FieldDesc*: 0x79b949e8
MT Field Offset Type Attr
Value Name
0x79b94638 0x4000013 0x4 System.Int32 instance 20
m_arrayLength
0x79b94638 0x4000014 0x8 System.Int32 instance 19
m_stringLength
0x79b94638 0x4000015 0xc System.Char instance 0x31
m_firstChar
0x79b94638 0x4000016 0 CLASS shared static
Empty
>> Domain:Value 0x00175700:0x053811f4 <<
0x79b94638 0x4000017 0x4 CLASS shared static
WhitespaceChars
>> Domain:Value 0x00175700:0x05381208 <<
0:028> !do 375ef39c
Name: xxx.xxx.Sender
MethodTable 0x0b117ccc
EEClass 0x0b287cac
Size 48(0x30) bytes
GC Generation: 2
mdToken: 0x02000003 (d:\aim7.3.3\run\bin\release
\xxx.xxx.tcpmessenger.dll)
FieldDesc*: 0x0b117b58
MT Field Offset Type Attr
Value Name
0x0b117ccc 0x400000c 0x4 CLASS instance
0x05f59ec0 sendSocket
0x0b117ccc 0x400000d 0x8 CLASS instance
0x375ef3cc ackBuffer
0x0b117ccc 0x400000e 0xc CLASS instance
0x375f1404 messageQueue
0x0b117ccc 0x400000f 0x10 CLASS instance
0x05ba1920 parentMessenger
0x0b117ccc 0x4000010 0x14 CLASS instance
0x05f59e78 remoteEndPoint
0x0b117ccc 0x4000011 0x28 System.Boolean instance 0
disconnectAfterSend
0x0b117ccc 0x4000012 0x29 System.Boolean instance 0
activeSendState
0x0b117ccc 0x4000013 0x18 CLASS instance
0x00000000 currentMessageSpb
0x0b117ccc 0x4000014 0x1c CLASS instance
0x375f14b4 communicationTimeoutTimer
0x0b117ccc 0x4000015 0x20 CLASS instance
0x375ef3f8 buffer
0x0b117ccc 0x4000016 0x24 System.Int32 instance 10000
communicationTimeoutInMilliSeconds
-------------------------------------------------------------------------
Regards
Kjell Gunnar