netext
netext copied to clipboard
"Unable to read 0x4 bytes at 00000000" for !wconcurrentdict
I have 32 bit dump that was taken on 64 bit machine using 32 bit task manager. Everything works fine except !wconcurrentdict
I got this error: ERROR: !wconcurrentdict: extension exception 0x80004002. "Unable to read 0x4 bytes at 00000000"
I tried few different ConcurrentDictionary's and I always got the same error. I was able to check them via Windbg using standard SOS. I can check m_tables, m_buckets and m_countPerLock without any problem. It just very time consuming.
0:000> !wconcurrentdict 0f2d0d78
ERROR: !wconcurrentdict: extension exception 0x80004002.
"Unable to read 0x4 bytes at 00000000"
0:000> !DumpObj 0f2d0d78
Name: System.Collections.Concurrent.ConcurrentDictionary`2[[System.String, mscorlib],[System.Collections.Generic.List`1[[Class1, Class2]], mscorlib]]
MethodTable: 2bd92734
EEClass: 25b588e0
Size: 40(0x28) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
25bcb014 4001851 4 ...Canon, mscorlib]] 0 instance a5ea01d0 m_tables
24aca40c 4001852 8 ...Canon, mscorlib]] 0 instance 00000000 m_comparer
0895c068 4001853 20 System.Boolean 1 instance 1 m_growLockArray
0895dfd0 4001854 10 System.Int32 1 instance 0 m_keyRehashCount
0895dfd0 4001855 14 System.Int32 1 instance 17 m_budget
2672dcec 4001856 c ...non, mscorlib]][] 0 instance 00000000 m_serializationArray
0895dfd0 4001857 18 System.Int32 1 instance 0 m_serializationConcurrencyLevel
0895dfd0 4001858 1c System.Int32 1 instance 0 m_serializationCapacity
0895c068 400185b 8 System.Boolean 1 static <no information>
0:000> !DumpObj /d a5ea01d0
Name: System.Collections.Concurrent.ConcurrentDictionary`2+Tables[[System.String, mscorlib],[System.Collections.Generic.List`1[[Class1, Class2]], mscorlib]]
MethodTable: 2bd92d5c
EEClass: 25b596e0
Size: 24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
00000000 400349c 4 SZARRAY 0 instance a5ea42a8 m_buckets
0895b8ac 400349d 8 System.Object[] 0 instance 1a2d1318 m_locks
24b4bd14 400349e c System.Int32[] 0 instance a5eb5aa8 m_countPerLock
24aca40c 400349f 10 ...Canon, mscorlib]] 0 instance 14276e00 m_comparer
0:000> !DumpObj /d a5ea42a8
Name: System.Collections.Concurrent.ConcurrentDictionary`2+Node[[System.String, mscorlib],[System.Collections.Generic.List`1[[Class1, Class2]], mscorlib]][]
MethodTable: 2bd92c94
EEClass: 0895b844
Size: 71680(0x11800) bytes
Array: Rank 1, Number of elements 17917, Type CLASS (Print Array)
Fields:
None
0:000> !DumpObj /d a5eb5aa8
Name: System.Int32[]
MethodTable: 24b4bd14
EEClass: 24b4bcb8
Size: 4108(0x100c) bytes
Array: Rank 1, Number of elements 1024, Type Int32 (Print Array)
Fields:
None
I did not write !wconcurrentdict, it was a contribution. I tested on a few dumps and it worked but I did not do a thorough test. Do you have any particular steps to reproduce it from scratch? I will try to create a concurrent dictionary but I am not sure of the exact types. By the dump output it looks like ConcurrentDict<String, List<<Class1, Class2>> which looks like a compiler generated dictionary.
Hi. Sorry I don't have any particular steps. I had 32 bit dump and I was trying to see content.
ConcurrentDictionary<String, List<<Class1, Class2>>
is not compiler generated. It is in our code as static field with. I just replaced real class names to Class1 and Class2.
I did try to use this command on different ConcurrentDictionary
and it also does not work. I hope it helps :)