显示最近发生的一个调试事件,往往是导致中断发生的那个。
Windgb 其他常用命令
此命令显示一个异常记录的详细内容,传入一个异常记录地址:
如果仅仅为了显示最近的一条异常记录,可以用-1代替异常记录地址:
由于异常是事件的一种,所以使用.exr -1命令得到的异常,可能和使用.lastevent命令获取的事件,是同一个。但二者显示的信息各有侧重点。
Windgb 其他常用命令
此命令不带参数。在内核环境下,显示当前bug check的详细信息;可用于活动调试或者crash dump调试环境中。用户环境中,此命令不可用。 此命令分析当前最近的异常事件(如果在进行dump分析,则是bug check),并显示分析结果。这个异常事件,就是上面.lastevent命令对应的事件
- -v:显示异常的详细信息,这个选项在调试错误的时候,最有用。
- -f:f是force的缩写。强制将任何事件都当作异常来分析,即使仅仅是普通的断点事件。将因此多输出一些内容。
- -hang:这个选项很有用,对于遇到死锁的情况,它会分析原因。在内核环境中,它分析内核锁和DPC栈;在用户环境中,它分析线程的调用栈。用户环境中,调试器只会对当前线程进行分析,所以一定要将线程环境切换到最可能引起问题的那个线程中去,才有帮助。这个参数非常有用,当真的遇到死锁时,它可以救命(另一个分析死锁的有效命令是!locks)。
Windgb 其他常用命令
此命令是Get Last Error的缩写。它调用Win32接口函数GetLastError()取得线程的错误值,并打印分析结果。如果带有-all选项,则针对当前进程的所有线程执行GetLastError()操作;否则仅针对当前线程。 这两个命令是g命令的扩展。 - gh:是go with Exception handled的缩写,意思是:把异常标识为已处理并继续执行程序;gh的作用在于,当遇到某个可以忽略的非致命异常时,将它先跳过,继续执行程序。
- gn:是go with Exception not handled的缩写,对异常不进行任何处理,而继续执行程序。这时候,程序自己的异常处理模块将有机会处理异
!name2ee 显示指定模块中指定类型或方法的MethodTable结构和EEClass结构。 指定模块必须被装入进程中。
Windgb 其他常用命令
!dumpmt –md address 查看指定地址的方法表和一个类的方法集
Windgb 其他常用命令
!dumpmd address 显示指定地址的MethodDesc结构信息 显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size
Windgb 其他常用命令
!gcroot address 查看所有对指定地址的对象的引用
!dumpil Address 查看指定地址的IL 0:035> !dumpil 000007fe9e8af4a0
ilAddr = 0000000011b5a3e8
IL_0000: call System.Threading.Tasks.Task::get_Factory
IL_0005: ldsfld <>c::<>9__2_0
IL_000a: dup
IL_000b: brtrue.s IL_0024
IL_000d: pop
IL_000e: ldsfld <>c::<>9
IL_0013: ldftn <>c::<StartLogTask>b__2_0
IL_0019: newobj System.Action::.ctor
IL_001e: dup
IL_001f: stsfld <>c::<>9__2_0
IL_0024: callvirt System.Threading.Tasks.TaskFactory::StartNew
IL_0029: pop
IL_002a: ret
!savemodule moduleaddress path 保存具体的dll 到 某个路径
Windgb 其他常用命令
!heap 显示堆信息
Windgb 其他常用命令
!EEHeap [-gc] [-loader]
显示被公共语言运行时内部数据结构使用的进程内存的有关信息。 -gc 和 -loader 选项限制该命令的输出内容为垃圾收集器或者装载器的数据结构。 对于垃圾收集器,列出在托管堆里每一个节的范围信息。如果某指针是在EEHeap -gc给出的某个节范围内,那么该指针是一个对象指针。
Windgb 其他常用命令
!DumpHeap 将遍历 GC 堆对对象进行分析。通过指定不同的选项,可以查看特定的类型、数组和锁。 如果不加任何选项,该命令的输出首先为堆中对象的列表,然后是包含已发现类型的列表、大小和数量的报表。 其中 “Free” 对象代表的是垃圾回收器可以使用的区域。如果此区域的大小超过30%则可能意味着出现了堆碎片。 这通常是由于某些对象被持有了较长时间,并且结合了大量高频率的内存分配。 !DumpHeap 会针对此情况提供一个关于堆碎片化的警告 -stat 限定输出为类型统计分析的汇总 -min <size> 忽略尺寸小于给定的 bytes 值的对象 -max <size> 忽略尺寸大于给定的 bytes 值的对象 !dumpheap -min 850000 -stat 查找具体占用内存大的对象 -stat (是否统计输出)
Windgb 其他常用命令
Windgb 其他常用命令
有两个地址 查找该地址的引用 !gcroot 000000052f342dc8 !do address 显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size
查找具体的位置 保存Model 到具体的地方 反编译查看原因
|