回到Java世界,我能夠指定JVM應該在第一個OutOfMemoryError上創建一個堆轉儲文件。在C#中有什麼等價物嗎?任何方式來在C#中的OutOfMemoryException上創建堆轉儲/直方圖?
堆轉儲將是理想的,但我會解決一個直方圖。
如果沒有辦法自動執行此操作,是否有辦法鉤住此異常,然後手動操作堆棧?
回到Java世界,我能夠指定JVM應該在第一個OutOfMemoryError上創建一個堆轉儲文件。在C#中有什麼等價物嗎?任何方式來在C#中的OutOfMemoryException上創建堆轉儲/直方圖?
堆轉儲將是理想的,但我會解決一個直方圖。
如果沒有辦法自動執行此操作,是否有辦法鉤住此異常,然後手動操作堆棧?
您可以使用MS調試工具ADPlus實用程序來獲取包含所有堆的進程轉儲。 然後使用WinDBG.exe(也在調試工具中),您可以使用!DumpHeap命令獲取所需的所有數據。
我會用procdump,因爲你可以很容易地將它設置在飛機墜毀前,當發生崩潰轉儲出內存。然後使用windbg瀏覽內存。
我想補充一點,如果內存不是很明顯的話(使用sos.dll工具命令!dumpheap -stat),那麼你可以使用procdump以特定的時間間隔進行一些崩潰轉儲,這樣你就可以跟蹤內存越來越大。
如果您不熟悉windbg和sos,您可能需要check this out。
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
http://stackoverflow.com/questions/1721111/how-can-i-take-a-dump-file-for-winforms-application – 2012-03-11 09:45:07