2023年1月

由于.net异常与任何其他异常一样是一个.net对象,因此当您(或您调用的某些代码)调用new XXException()时,它会存储在GC堆中。这意味着,如果您有一个进程的内存转储,您可以转储所有最近发生的异常,或者更确切地说,所有尚未被垃圾收集的异常。

如果您在windbg中加载了sos(.loadby sos mscorwks),则执行此操作非常简单

0:015> !dumpheap -type Exception------------------------------Heap0Address       MT     Size
02ea6b0c 79330a80
7202ea75f0 7930eab476
06f57aa4 7930eab4
7606f5829c 7930eab47606f58a94 7930eab47606f5928c 7930eab47606f59a84 7930eab47606f5a27c 7930eab47606f5aa74 7930eab47606f5b26c 7930eab47606f5ba64 7930eab47606f5c25c 7930eab47606f5ca54 7930eab47606f5d24c 7930eab476total319objects------------------------------total656objects
Statistics:
MT Count TotalSize Class Name
79333dc0
1 12System.Text.DecoderExceptionFallback
79333d7c
1 12System.Text.EncoderExceptionFallback
793172f8
2 64System.UnhandledExceptionEventHandler
79330c30
1 72System.ExecutionEngineException
79330ba0
1 72System.StackOverflowException
79330b10
1 72System.OutOfMemoryException
79330a80
1 72System.Exception
79330cc0
2 144System.Threading.ThreadAbortException
7930eab4
646 49096System.IO.DirectoryNotFoundException
Total
656 objects

windbg的dt指令可以用来显示变量的结构和值,如果是一个C++类,那么它将以偏移的形式显示类里的成员地址和符号名。那类里的静态成员呢?如下:

 

 可知,静态成员以=符号开始,紧跟地址、符号名和值

 

简介

STATUS_IMAGE_CHECKSUM_MISMATCH表明应用程序或DLL已经损坏。值为0xC0000221。其定义如下:

//
// MessageId: STATUS_IMAGE_CHECKSUM_MISMATCH
//
// MessageText:
//
// {Bad Image Checksum}
// The image %hs is possibly corrupt. The header checksum does not match the computed checksum.
//
#define STATUS_IMAGE_CHECKSUM_MISMATCH   ((NTSTATUS)0xC0000221L)

说明

检查程序或其他系统文件中出现严重错误。 文件头校验和与预期的校验和不匹配。这也可能是由文件的 i/o 路径中的硬件错误 (磁盘错误、有故障的 RAM 或损坏的页面文件) 导致的

在调试的过程中,我们很有可能需要知道某个类或结构体的大小,有哪些方式方法呢?

其一,用dx指令观察类型实例,它会列出成员和每个成员的大小,自己计算,比如

 

自己根据类型信息和内存对齐去计算,如果成员是其他复杂的结构,不清楚的话难计算,另外,不知道对齐规则,会算错。所以这样很麻烦。

其二、用dt -v指令,它会直接给出大小

 

其三、上面的指令已经很体贴了,可是如果你是C/C++程序员,可能你会更喜欢??sizeof