• WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册


    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载。

    系列博文

    1. 《WinDbg 命令三部曲:(一)WinDbg 命令手册》
    2. 《WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册》
    3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》

    导航目录

    SOSEX 调试命令手册

    扩展加载命令
    命令 描述
    .load

    .load sosex

    .load C:Program Files (x86)Windows Kits8.1Debuggersx64sosex.dll

    SOSEX扩展命令
    命令 描述

    !bhi

    !bhi [filename]    BuildHeapIndex  用于对 GC 堆内的对象构建一个索引文件。

    这将使 !gcroot 和 !refs 命令工作的更加快速。

    索引内容将被存储到给定的文件名的文件中。

    如果未指定文件名,则默认的文件名为 %dumppath%\%dumpname%_heapindex.bin 。

    !chi

    !chi   ClearHeapIndex  释放堆索引使用的所有资源,并从内存中移除。

    !dlk

    !dlk [-d]   检测 SynczBlock 死锁。

    -d           同时也检测 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生类。

    !dumpfd

    !dumpfd <FieldAddr>    显示 FieldDef 结构的属性值。

    !dumpgen

    !dumpgen <intGenNum> [-free] [-stat] [-type <TYPE_NAME>] [-nostrings]

    以如下格式显示指定代的内容:

    hexAddr decSize strTypeName

    -nostrings    不显示对象名称或字符串数据。

    -free            仅包括 FREE 的对象类型。

    -stat            仅显示一个综合的统计。

    -type           仅包含类型名称字符串中包含给定子字符串的对象数据。

    !finq

    !finq [GenNum] [-stat]  显示终结化队列中的对象,并根据代来分类。

    GenNum    给定的代(generation)。

    -stat         显示统计信息。

    !frq

    !frq [-stat]   显示可达队列(Freachable Queue)中的对象。

    !gcgen

    !gcgen <hexObjectAddr>  获取给定对象在 GC Heap 中的代数。如果对象在 LOH 中,则会提示 “Large Object Heap”。

    !gch

    !gch [-HandleType] [-stat]  列出所有 GCHandle 实例。

    -HandleType 指定句柄的类型。!gch -Pinned -Strong

    -stat           根据句柄类型进行统计。

    有效的类型有:

    • WeakShort
    • WeakLong
    • Strong
    • Pinned
    • Variable
    • RefCounted
    • AsyncPinned

    !lhi 

    !lhi [filename]     LoadHeapIndex 从给定的文件中加载堆索引。

    如果未指定文件名称,则默认的文件名称为 %dumppath%\%dumpname%_heapindex.bin。

    !mbc 

    !mbc <Managed Breakpoint ID | *>    移除指定 ID 的断点。* 为移除全部。

    !mbd 

    !mbd <Managed Breakpoint ID | *>   使失效,但不移除断点。

    !mbe 

    !mbe <Managed Breakpoint ID | *>    使断点生效。

    !mbl 

    !mbl <Managed Breakpoint ID>          显示给定 ID 的断点,或列出所有托管断点及其状态。

    !mbm 

    !mbm <method filter> [ILOffset] [Options]  在指定的方法及偏移处设置断点。

    !mdso

    !mdso [Options]    显示在当前上下文中,对象在栈上和 CPU 寄存器中的引用。

    /a               显示栈上所有对象的引用。

    /r               仅显示寄存器中的对象。

    /c:n            限定显示的对象的数量为 n。

    /t:typeFilter 限制显示的对象的类型。

    /mt:MT       限制显示的对象为指定的方法表。

    !mdt 

    !mdt [typename | paramname | localname | MT] [ADDR] [-r[:level]] [-e[:level]] [-start:index] [-count:n]

    显示指定对象或类型的字段信息。

    -r   递归显示字段信息。

    -e   指定的类型将被扩展。

    !mdv 

    !mdv [nFrameNum]    显示当前帧中的参数或局部变量的信息。帧来自 !mframe 命令。

    !mfrag 

    !mfrag [-stat] [-mt:<MT>]    输出空闲的块报告。

    -stat      显示统计报告

    -mt:MT   仅显示碎片信息

    !mframe 

    !mframe [frame number]    为 !mdt 或 !mdv 命令设置当前的托管帧。

    !mgu

    !mgu   返回在当前调用栈中最后一个托管调用者的当前位置。

    !mk 

    !mk [-l] [-p] [-a] [-c] [-cc]    显示调用栈中托管和非托管帧的组合。

    -l    显示局部变量

    -p   显示参数

    -a   显示局部变量和参数(Locals + Parameters)

    -c   清理

    -cc  清理,同时也拆解名空间。

    !mln

    !mln [address expression]    显示给定地址处的 CLR 数据类型。

    !mlocks 

    !mlocks [-d]    显示线程中所有的托管锁对象和 CriticalSections 对象。

    -d   同样搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生类。

    !mroot 

    !mroot <ObjectAddr> [-all]    显示指定对象的 GC 根。

    通常情况,仅显示第一个 Root 路径。

    -all 显示所有的路径,这可能会耗费较长的时间。

    !mt

    !mt   步进至当前位置的托管方法。

    !mu 

    !mu [address] [-s] [-il] [-n]  显示托管和非托管反汇编的交叉信息。

    -s   显示源代码,如果可用。

    -il   显示 IL 反汇编程序。

    -n   显示原生的反汇编程序。

    默认情况为 IL 和 Native 均显示。

    !muf

    !muf [MD Address | CodeAddress]  [-s] [-il] [-n]   根据给定的 MD 信息进行反汇编,并显示交叉信息。

    -s   显示源代码,如果可用。

    -il   显示 IL 反汇编程序。

    -n   显示原生的反汇编程序。

    默认情况为 IL 和 Native 均显示。

    !mwaits

    !mwaits [-d | LockAddr]    显示所有正在等待的线程。如果可知的话,同时显示正在等待的锁的信息。

    -d            同样搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生类。

    LockAddr  列出所有等待该地址锁的线程。

    -d 和 LockAddr 选项是互斥的。

    !mx

    !mx <Filter String>    显示任意匹配的类型、方法、字段等。

    !rcw

    !rcw [Object or SyncBlock Addr]  显示 RuntimeCallableWrapper 数据。

    !refs

    !refs <hexObjectAddr> [-target|-source]    列出指定对象的所有的引用。

    -source    仅显示指定对象所持有的引用。

    -target     仅显示持有指定对象的引用。

    格式化的输出采用如下格式:

    hexAddr decSize strTypeName

    !rwlock

    !rwlock [ObjectAddr | -d]    显示所有的 RWLock。如果给定 RWLock 地址,则显示该锁的详细信息。

    -d            同样搜索 ReaderWriterLock 或 ReaderWriterLockSlim 的衍生类。

    !strings

    !strings [ModuleAddress] [Options]    在托管堆或指定的模块中搜索匹配的字符串信息。

    可选项:

    g:<min gen>        列出指定 GC 代数中的字符串。有效的参数为 0、1、2 和 3(LOH)。

    m:<match filter>  显示指定匹配规则的字符串。

    n:<min length>    显示字符串的长度的最小值。

    x:<max length>   显示字符串的长度的最大值。

    参考资料

    本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载。

    系列博文

    1. 《WinDbg 命令三部曲:(一)WinDbg 命令手册》
    2. 《WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册》
    3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》
  • 相关阅读:
    抓取登录后的数据
    Form认证的几点说明
    eclipse启动错误:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer
    mysql游标的使用 No data
    mysql insert 主键 重复问题
    tail 命令
    maven 打包可执行jar的方法
    maven中如何打包源代码
    工程师,请优化你的代码
    在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
  • 原文地址:https://www.cnblogs.com/gaochundong/p/windbg_sosex_cheat_sheet.html
Copyright © 2020-2023  润新知