如何在 .NET 中使用 SOS 调试扩展检查类型的 IFaceMap
How to inspect IFaceMap of a type using SOS debugging extension in .NET
是否可以使用SOS调试插件输出某种类型的IFaceMap? DumpMT
命令只给出了一个类型实现的接口数量,但它没有给出任何命令来输出 IFacemap 条目本身
!DumpMT -MD 007938ec
EEClass: 00791310
Module: 00792e94
Name: DebugTest.Customer
mdToken: 02000004
BaseSize: 0x10
ComponentSize: 0x0
Slots in VTable: 10
Number of IFaces in IFaceMap: 1
!DumpHeap
也不输出接口。
我从来没有在 SOS 或 SOSEX 中遇到过这样的功能。我看到的最接近的命令来自 NetExt (Codeplex)。 NetExt 是开源的,所以如果你想研究内部结构,你可以阅读源代码,看看它是如何找到接口信息的。
一个命令是!windex -implement <InterfaceName>
。但是,这也没有列出一个类型的所有接口,而是相反:实现一个接口的所有类型。这听起来对你的情况可能很有趣。
另一个是 !wclass <MethodTable>
,输出看起来类似于 .NET 反编译代码。在 class 定义级别,您可以看到实现的接口(摘自 NetExt 文档):
0:00> !wclass 00000001045f0c68
...
namespace System.Web.Configuration {
internal class HttpConfigurationSystem: System.Configuration.Internal.IInternalConfigSystem
{
...
是否可以使用SOS调试插件输出某种类型的IFaceMap? DumpMT
命令只给出了一个类型实现的接口数量,但它没有给出任何命令来输出 IFacemap 条目本身
!DumpMT -MD 007938ec
EEClass: 00791310
Module: 00792e94
Name: DebugTest.Customer
mdToken: 02000004
BaseSize: 0x10
ComponentSize: 0x0
Slots in VTable: 10
Number of IFaces in IFaceMap: 1
!DumpHeap
也不输出接口。
我从来没有在 SOS 或 SOSEX 中遇到过这样的功能。我看到的最接近的命令来自 NetExt (Codeplex)。 NetExt 是开源的,所以如果你想研究内部结构,你可以阅读源代码,看看它是如何找到接口信息的。
一个命令是!windex -implement <InterfaceName>
。但是,这也没有列出一个类型的所有接口,而是相反:实现一个接口的所有类型。这听起来对你的情况可能很有趣。
另一个是 !wclass <MethodTable>
,输出看起来类似于 .NET 反编译代码。在 class 定义级别,您可以看到实现的接口(摘自 NetExt 文档):
0:00> !wclass 00000001045f0c68
...
namespace System.Web.Configuration {
internal class HttpConfigurationSystem: System.Configuration.Internal.IInternalConfigSystem
{
...