使用 Windbg 和 SOS.dll 转储字典对象的内容 在此博客上,此命令:
0:009> !dumpvc 000007fe984b57d8 000000018003ead8
Run Code Online (Sandbox Code Playgroud)
他想查看数组中的一个元素,这里元素类型是
System.Collections.Generic.Dictionary`2+Entry[[System.Guid, mscorlib],[Microsoft.TeamFoundation.Framework.Server.TeamFoundationPerformanceCounters, Microsoft.TeamFoundation.Framework.Server]]
Run Code Online (Sandbox Code Playgroud)
从我的角度来看,我认为 !dumpvc 是用来探索值类型的,类型 'Dictionary`2+Entry...' 不是值类型。
造成这种情况的原因是什么?
我尝试过这个:转储字节数组。
0:000> !da -length 3 -nofields 00000001ba9f63b0
-nofields has no effect unless -details is specified
Name: System.Byte[]
MethodTable: 000007fee3a20b50
EEClass: 000007fee35a2330
Size: 148(0x94) bytes
Array: Rank 1, Number of elements 124, Type Byte
Element Methodtable: 000007fee3a1c168
[0] 00000001ba9f63c0
[1] 00000001ba9f63c1
[2] 00000001ba9f63c2
0:000> !do 00000001ba9f63c0
<Note: this object has an invalid CLASS field>
0:000> !dumpvc 000007fee3a1c168 00000001ba9f63c0
Name: System.Byte
MethodTable: 000007fee3a1c168
EEClass: 000007fee35a03b8
Size: 24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\....\mscorlib.dll
Fields:
MT Field Offset Type VT Attr Value Name
000007fee3a1c168 4000276 0 System.Byte 1 instance 62 m_value
Run Code Online (Sandbox Code Playgroud)
它显示了我预期的结果。当我调试时,!dumpvc 可以每次都探索数组元素吗?
Byte[] 是一种引用类型,您可以使用 转储它!do。
字节是一种值类型,!da如果有很多字节,则可以使用它转储它。
这同样适用于字典:
Dictionary`2 是一个引用类型并使用!do.
这些条目的类型为 Dictionary`2+Entry ,它似乎是一个包含指向键和值的指针的结构(类似于KeyValuePair)。结构是值类型,由它们转储并且您可以在它们上!da使用。!dumpvc