可以使用 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
來找到它。