• Windgb 其他常用命令


    • .lastevent

      显示最近发生的一个调试事件,往往是导致中断发生的那个。

    • .exr:

          此命令显示一个异常记录的详细内容,传入一个异常记录地址:

    • .exr 记录地址

      如果仅仅为了显示最近的一条异常记录,可以用-1代替异常记录地址:

    • .exr -1

      由于异常是事件的一种,所以使用.exr -1命令得到的异常,可能和使用.lastevent命令获取的事件,是同一个。但二者显示的信息各有侧重点。

     

    • .bugcheck

      此命令不带参数。在内核环境下,显示当前bug check的详细信息;可用于活动调试或者crash dump调试环境中。用户环境中,此命令不可用。

    • !analyze

      此命令分析当前最近的异常事件(如果在进行dump分析,则是bug check),并显示分析结果。这个异常事件,就是上面.lastevent命令对应的事件

      • -v:显示异常的详细信息,这个选项在调试错误的时候,最有用。
      • -f:f是force的缩写。强制将任何事件都当作异常来分析,即使仅仅是普通的断点事件。将因此多输出一些内容。
      • -hang:这个选项很有用,对于遇到死锁的情况,它会分析原因。在内核环境中,它分析内核锁和DPC栈;在用户环境中,它分析线程的调用栈。用户环境中,调试器只会对当前线程进行分析,所以一定要将线程环境切换到最可能引起问题的那个线程中去,才有帮助。这个参数非常有用,当真的遇到死锁时,它可以救命(另一个分析死锁的有效命令是!locks)。

    • !gle

      此命令是Get Last Error的缩写。它调用Win32接口函数GetLastError()取得线程的错误值,并打印分析结果。如果带有-all选项,则针对当前进程的所有线程执行GetLastError()操作;否则仅针对当前线程。

    • gh/gn

      这两个命令是g命令的扩展。

    1. gh:是go with Exception handled的缩写,意思是:把异常标识为已处理并继续执行程序;gh的作用在于,当遇到某个可以忽略的非致命异常时,将它先跳过,继续执行程序。
    2. gn:是go with Exception not handled的缩写,对异常不进行任何处理,而继续执行程序。这时候,程序自己的异常处理模块将有机会处理异

     !name2ee

    显示指定模块中指定类型或方法的MethodTable结构和EEClass结构。

    指定模块必须被装入进程中。

    !dumpmt –md address 查看指定地址的方法表和一个类的方法集

    !dumpmd address  显示指定地址的MethodDesc结构信息

    显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size

    !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 到 某个路径

    !heap 显示堆信息

    • !heap -a 显示某个进程下的堆信息(明细 


    !EEHeap [-gc] [-loader]  

    显示被公共语言运行时内部数据结构使用的进程内存的有关信息。

    -gc 和 -loader 选项限制该命令的输出内容为垃圾收集器或者装载器的数据结构。

    对于垃圾收集器,列出在托管堆里每一个节的范围信息。如果某指针是在EEHeap -gc给出的某个节范围内,那么该指针是一个对象指针。

    !DumpHeap 将遍历 GC 堆对对象进行分析。通过指定不同的选项,可以查看特定的类型、数组和锁。

                      如果不加任何选项,该命令的输出首先为堆中对象的列表,然后是包含已发现类型的列表、大小和数量的报表。

    其中 “Free” 对象代表的是垃圾回收器可以使用的区域。如果此区域的大小超过30%则可能意味着出现了堆碎片。

    这通常是由于某些对象被持有了较长时间,并且结合了大量高频率的内存分配。

    !DumpHeap 会针对此情况提供一个关于堆碎片化的警告

    -stat              限定输出为类型统计分析的汇总

    -min <size>    忽略尺寸小于给定的 bytes 值的对象

    -max <size>   忽略尺寸大于给定的 bytes 值的对象

    !dumpheap -min 850000 -stat   查找具体占用内存大的对象 -stat (是否统计输出)

    有两个地址  查找该地址的引用   !gcroot 000000052f342dc8

    !do address 显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size
     
    查找具体的位置 保存Model 到具体的地方 反编译查看原因
     
  • 相关阅读:
    数据结构矩阵问题总结
    数据结构:二维ST表
    mysql--时区表问题(Windows环境下)
    mysql--基本命令
    Django2.0--创建缓存表
    git--基本命令
    阿里云主机--重置系统后的登录问题
    链表中倒数第K个结点
    从尾到头打印链表
    替换空格
  • 原文地址:https://www.cnblogs.com/liwenchaoCode/p/9234158.html
Copyright © 2020-2023  润新知