首先找到TaskScheduler的方法表
0:025> .loadby sos clr
0:025> .symfix c:\debug\symbols
0:025> !name2ee mscorlib.dll System.Threading.Tasks.TaskScheduler
Module: 000007feeea11000
Assembly: mscorlib.dll
Token: 000000000200052e
MethodTable: 000007feef0a8ab0
EEClass: 000007feeebde1a8
Name: System.Threading.Tasks.TaskScheduler
Run Code Online (Sandbox Code Playgroud)
然后,转储堆以查找该类型的一些对象。请注意,我在这里使用 String,因为我没有带有可用 TaskScheduler 的应用程序。
0:025> !dumpheap -mt <MethodTable>
Run Code Online (Sandbox Code Playgroud)
现在您已经有了一些对象,只需转储其中之一即可。
0:025> !do 00000000126ed548
Name: System.String
MethodTable: 000007feef0bda88
EEClass: 000007feeea16a08
Size: 34(0x22) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll
String: 100%
Fields:
MT Field Offset Type VT Attr Value Name
000007feef0c03d0 4000243 8 System.Int32 1 instance 4 m_stringLength
000007feef0bec38 4000244 c System.Char 1 instance 31 m_firstChar
000007feef0bda88 4000248 80 System.String 0 shared static Empty
Run Code Online (Sandbox Code Playgroud)
注意字符串的shared(静态)属性。Empty您应该在 TaskScheduler 中获得类似的静态属性Default。
正如你所看到的,你什么也看不见。这就是为什么您需要SOSEX扩展并执行!mdt System.Threading.Tasks.TaskScheduler.
0:025> !mdt System.String
System.String
[...]
[s]Empty: string
AppDomain 'Test.exe' (0000000001d73470): 0000000011fc1420[System.String] STRVAL=
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
128 次 |
| 最近记录: |