2017-04-10 66 views
1

我在實時調試會話中調試Microsoft Word。該進程加載了一些託管加載項,所以我使用sos和psscor4。 winword.exe進程是一個32位進程,但是託管加載項將MSIL作爲PlatformArchitecture枚舉的值,這意味着它們被編譯爲在任何平臺上進行JITT。加載psscor4:垃圾收集器的數據結構未處於遍歷的有效狀態

我正在使用Windbg(x86)。

只要從C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319目錄加載psscor4,然後嘗試使用任何與GC相關的命令,例如!clrusage命令,我就會收到以下消息:

對於 遍歷,垃圾回收器數據結構未處於有效狀態。它或者處於「計劃階段」,其中對象正在移動,或者我們正在初始化或關閉gc 堆。與顯示,查找或遍歷對象相關的命令爲 以及gc堆段可能無法正常工作。 !dumpheap和 !verifyheap可能會錯誤地報告堆一致性錯誤。錯誤 請求GC堆數據無法構建垃圾回收器狀態的快照。

在psscor4加載期間,甚至與GC相關的sos命令也不起作用。例如,如果我運行了heapstatdumpheapeeheap -gc命令,則它們不起作用。

只要我卸載psscor4,它們就會恢復工作。

回答

1

PSSCOR可能不適用於您的情況,因爲您的插件使用.NET 4.5和PSSCOR4 was not built for .NET 4.5。您可以使用lm vm clr來檢查.NET版本。如果它顯示4.0.30319.18401或更高,它是.NET 4.5。

!heapstat,!dumpheap!eeheap不起作用,因爲PSSCOR4自帶版本的這些命令。您可以使用.extmatch /e *psscor4* *命令驗證。

這取決於加載擴展的順序,哪一個是默認的。您可以使用.chain顯示已加載的分機,默認分機位於最上方。您可以使用.setdll將其他擴展程序設爲默認擴展名。

如果您不想更改默認擴展名,您還可以明確定義與!sos.heapstat等類似的SOS擴展名。

+0

如果有人可能解釋downvote,那會很好。我很高興通過WinDbg和SOS學習一些關於調試.NET的新知識。 –

+0

只是一個參考:我沒有downvote。我讚賞你的每一個答案和你的幫助。我仍然需要仔細研究一下我之前提出的問題的一些答案,我沒有把它們標記爲正確的。 –

+0

萬歲!謝謝。你會知道一個來自sosex的命令,它給你什麼'!psscor4.clrusage'嗎? Upvoted和取消,downvote,別人做了。 –