可以使用 WinDbg 和 SOS 扩展来查看它们。下面是如何使用 WinDbg 和 SOS 的步骤:
-
打开 WinDbg,并用它打开你的 dump 文件。你可以使用 File → Open Crash Dump 来实现。
-
在命令行中,加载 SOS 扩展。一般来说这可以通过
.loadby sos clr
来完成。如果这个不工作的话,你可能需要全路径来加载 SOS.dll,这可能在类似于"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll"
这样的地方找得到。 -
接下来,我们要找到你全局变量所在的类的 MethodTable 结构。你可以使用
!dumpheap -type <YourTypeName>
来找到你的类型,替换<YourTypeName>
为你的全局变量类型的全名(包括命名空间)。这将列出所有该类型的实例,以及它们的 MethodTable 地址。 -
用
!dumpmt -md <MethodTable 地址>
来查看关于这个类的信息,这里替换<MethodTable地址>
为你从上一步得到的地址。这将列出类的所有方法,以及所有静态字段/全局变量及其地址。 -
最后,用
!do <地址>
来查看你的全局变量当前的值。这里替换<地址>
为你在上一步中获得的地址。
注意:这个方法只对静态字段/全局变量有效。如果你的字段不是静态的,你需要知道哪个对象引用了它,然后用 !dumpheap -type
和 !do
来找到它。