如何在 .NET 应用程序的转储中找到默认 TaskScheduler 的内容?
How to find a content of the default TaskScheduler in a dump of a .NET application?
我正在尝试在 .NET application
的转储中查找默认值 TaskScheduler
的内容。我该怎么做?
一个应用程序被挂起。
我需要确保默认调度程序包含 delayed task
和某个 delegate
。
首先找到TaskScheduler
的方法table
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
然后,转储堆以找到该类型的一些对象。请注意,我在这里使用的是 String,因为我没有带有可用 TaskScheduler 的应用程序。
0:025> !dumpheap -mt <MethodTable>
现在您已经有了一些对象,只需转储其中一个即可。
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
注意字符串的 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=
我正在尝试在 .NET application
的转储中查找默认值 TaskScheduler
的内容。我该怎么做?
一个应用程序被挂起。
我需要确保默认调度程序包含 delayed task
和某个 delegate
。
首先找到TaskScheduler
的方法table0: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
然后,转储堆以找到该类型的一些对象。请注意,我在这里使用的是 String,因为我没有带有可用 TaskScheduler 的应用程序。
0:025> !dumpheap -mt <MethodTable>
现在您已经有了一些对象,只需转储其中一个即可。
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
注意字符串的 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=