Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Unable to read 0x4 bytes at 00000000" for !wconcurrentdict #14

Open
vladimir-cheverdyuk-altium opened this issue Oct 5, 2020 · 2 comments

Comments

@vladimir-cheverdyuk-altium

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

@rodneyviana
Copy link
Owner

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.

@vladimir-cheverdyuk-altium
Copy link
Author

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 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants