如何在 .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
 {
...