2012-03-11 38 views
1

回到Java世界,我能夠指定JVM應該在第一個OutOfMemoryError上創建一個堆轉儲文件。在C#中有什麼等價物嗎?任何方式來在C#中的OutOfMemoryException上創建堆轉儲/直方圖?

堆轉儲將是理想的,但我會解決一個直方圖。

如果沒有辦法自動執行此操作,是否有辦法鉤住此異常,然後手動操作堆棧?

+0

http://stackoverflow.com/questions/4123021/how-to-create-process-mini-dump-on-crash-without-running-adplus-explicitly-on-wi – 2012-03-11 09:40:59

+0

http://stackoverflow.com/questions/1721111/how-can-i-take-a-dump-file-for-winforms-application – 2012-03-11 09:45:07

回答

0

您可以使用MS調試工具ADPlus實用程序來獲取包含所有堆的進程轉儲。 然後使用WinDBG.exe(也在調試工具中),您可以使用!DumpHeap命令獲取所需的所有數據。

a little old but useful HOWTO link

+0

Thanks @Menahem,很好的建議,但是我真的很喜歡能夠在用戶機器上記錄輸出的東西,我將無法在當時附加調試器。 – chillitom 2012-03-11 09:49:33

+0

@chillitom在這種情況下,您可以將調試器配置爲在客戶機器上靜靜地轉儲轉儲,並在發生時自動執行轉儲。然後將轉儲複製到可以分析它的機器。米奇小麥發佈了一個鏈接來描述如何完成這件事。 – Menahem 2012-03-11 10:01:45

0

我會用procdump,因爲你可以很容易地將它設置在飛機墜毀前,當發生崩潰轉儲出內存。然後使用windbg瀏覽內存。

我想補充一點,如果內存不是很明顯的話(使用sos.dll工具命令!dumpheap -stat),那麼你可以使用procdump以特定的時間間隔進行一些崩潰轉儲,這樣你就可以跟蹤內存越來越大。

如果您不熟悉windbg和sos,您可能需要check this out