У меня есть метод, который принимает struct
и class
.Я могу использовать !DumpObj
, чтобы получить адрес таблицы методов, и их !DumpMT
, чтобы увидеть ее свойства.
0:000> !CLRStack -a
OS Thread Id: 0x23c0 (0)
Child SP IP Call Site
0000000000f5e8c0 00007ff9ff0a0616 ValueAndReferenceTypes.Program.Print(ValueAndReferenceTypes.MyStruct, ValueAndReferenceTypes.MyClass) [C:\SampleFiles\DotNet\ValueAndReference.cs @ 51]
PARAMETERS:
myStruct (0x0000000000f5e930) = 0x0000000d00000003
myClass (0x0000000000f5e938) = 0x00000000032152f0
0000000000f5e930 00007ff9ff0a0566 ValueAndReferenceTypes.Program.Main(System.String[]) [C:\SampleFiles\DotNet\ValueAndReference.cs @ 46]
PARAMETERS:
args (0x0000000000f5e9a0) = 0x0000000003212c18
LOCALS:
0x0000000000f5e97c = 0x0000000000000003
0x0000000000f5e978 = 0x000000000000000d
0x0000000000f5e970 = 0x0000000d00000003
0x0000000000f5e958 = 0x00000000032152f0
0x0000000000f5e968 = 0x0000000d00000003
0000000000f5ebd0 00007ffa5e696bb3 [GCFrame: 0000000000f5ebd0]
0:000> !DumpObj /d 00000000032152f0
Name: ValueAndReferenceTypes.MyClass
MethodTable: 00007ff9fef95b90
EEClass: 00007ff9ff122100
Size: 24(0x18) bytes
File: C:\SampleFiles\DotNet\ValueAndReference_x64.exe
Fields:
MT Field Offset Type VT Attr Value Name
00007ffa56c191c8 4000003 8 System.Int32 1 instance 3 A
00007ffa56c191c8 4000004 c System.Int32 1 instance 13 B
0:000> !DumpMT /d 00007ffa56c191c8
EEClass: 00007ffa565c45f8
Module: 00007ffa564f1000
Name: System.Int32
mdToken: 00000000020000fb
File: C:\WINDOWS\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
BaseSize: 0x18
ComponentSize: 0x0
Slots in VTable: 56
Number of IFaces in IFaceMap: 5
Как мне сделать то же самое для struct
?!DumpObj
терпит неудачу, потому что это не объект.Я считаю, что мне следует использовать !DumpVC
, но единственный способ узнать адрес таблицы методов - это команда !DumpObj
.