2009-07-26 28 views
4

是否可以訪問.NET應用程序中的託管堆,例如枚舉當前在那裏分配的對象?我可以通過.NET應用程序以編程方式查看託管堆內容嗎?

我知道有各種各樣的工具可以讓你做到這一點,但我寧願自己從代碼中做到這一點,以便我可以在自動化測試中使用它,例如檢查是否在關閉後處理和清理所有內容表單。

+0

無論如何/然而你找到你的解決方案,請張貼它。這對其他人肯定會有用。 – JoshJordan 2009-07-26 14:53:35

回答

1

的唯一方法,除了使用分析,是使用WinDbg與加載SOS擴展。

IIRC,你叫!EEHeap。

+0

那麼,如果所有這些分析器都可以做到這一點,那麼我想必須有一種方法......所以我想知道一個分析器是如何做到這一點的:-) – Timo 2009-07-26 15:31:46

+1

看看.NET Profiling api。 – leppie 2009-07-26 21:41:50

1

Profiler(使用Profiling API)是「外部」組件(不完全是COM),因爲它們由CLR加載,並且有多種選項可以在託管的任何方法中進入/離開/尾部調用代碼(以及許多其他的東西)。它們是用非託管代碼編寫的。

AFAIK沒有辦法在內部獲取此信息,而無需調用監視CLR的分析器/調試器。 另外請記住,你不能總是得到這種信息,只有在你的代碼完成執行(許多Dispose()調用,終結等)後才存在。

1

現在您可以使用ClrMD Nuget包。

Nuget包實際上被稱爲Microsoft.Diagnostics.Runtime。它將允許您查看堆中的對象以及CLR運行時的其他屬性。

相關問題