带有 SOS 的 Windgb 不显示结构字段值

Windgb with SOS does not show struct field values

我正在尝试使用 WinDbg 调试 运行 ASP.NET 应用程序。我需要的是查看传递给方法的参数的值。所以我在这个方法的断点上,从 !clrstack -p 我得到这个:

PARAMETERS:
    this (0x00000004af4fdc10) = 0x000001a2b8a06e68
    ideaForum (0x00000004af4fdc18) = 0x000001a2b8b11bc8
    page (0x00000004af4fdc20) = 0x0000000300000001

我对类型为 int?(System.Nullable<System.Int32>) 的 "page" 参数感兴趣,所以首先我找到了 System.Nullable`1[[System.Int32, mscorlib]] 的 MT 地址,它恰好是00007ffa263c7ae0。然后我调用 !dumpvc 00007ffa263c7ae0 0000000300000001,这是我得到的结果:

Name:        System.Nullable`1[[System.Int32, mscorlib]]
MethodTable: 00007ffa263c7ae0
EEClass:     00007ffa25dc6580
Size:        24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll

Fields:
              MT    Field   Offset                 Type VT     Attr            Value Name
00007ffa263da2e0  4000707        0       System.Boolean  1 instance  hasValue
00007ffa263baf60  4000708        4         System.Int32  1 instance  value

如您所见,我正在做 Windbg with SOS, How to dump a c# struct 中标记为答案的操作,但它不显示我需要的字段值。我还需要做什么才能获得价值? 谢谢。

编辑:看来我毕竟使用了错误的参数地址。参数名称后括号中的那个是正确的,所以我应该使用 0x00000004af4fdc20。有了这个,!dumpvc 确实按预期工作。 Sosex 更易于使用,因为它只需要参数名称即可完成工作

使用!sosex.mk -a。如果您想要的是字段值,请使用 !mdt 来转储类型。 Sosex 倾向于更友好地显示字段值,而 sos 擅长显示布局的更多技术细节。披露:我是 sosex 的作者,但它是完全免费的。