关于WinDbg/SOS如何快速转储堆上所有的.NET异常
由于.net异常与任何其他异常一样是一个.net对象,因此当您(或您调用的某些代码)调用new XXException()时,它会存储在GC堆中。这意味着,如果您有一个进程的内存转储,您可以转储所有最近发生的异常,或者更确切地说,所有尚未被垃圾收集的异常。
如果您在windbg中加载了sos(.loadby sos mscorwks),则执行此操作非常简单
0:015> !dumpheap -type Exception------------------------------Heap0Address MT Size
02ea6b0c 79330a807202ea75f0 7930eab476…
06f57aa4 7930eab47606f5829c 7930eab47606f58a94 7930eab47606f5928c 7930eab47606f59a84 7930eab47606f5a27c 7930eab47606f5aa74 7930eab47606f5b26c 7930eab47606f5ba64 7930eab47606f5c25c 7930eab47606f5ca54 7930eab47606f5d24c 7930eab476total319objects------------------------------total656objects
Statistics:
MT Count TotalSize Class Name
79333dc01 12System.Text.DecoderExceptionFallback
79333d7c1 12System.Text.EncoderExceptionFallback
793172f82 64System.UnhandledExceptionEventHandler
79330c301 72System.ExecutionEngineException
79330ba01 72System.StackOverflowException
79330b101 72System.OutOfMemoryException
79330a801 72System.Exception
79330cc02 144System.Threading.ThreadAbortException
7930eab4646 49096System.IO.DirectoryNotFoundException
Total656 objects