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

本文涉及的产品
图片翻译,图片翻译 100张
文档翻译,文档翻译 1千页
语种识别,语种识别 100万字符
简介:
  1. 《WinDbg 命令三部曲:(一)WinDbg 命令手册》
  2. 《WinDbg 命令三部曲:(二)WinDbg SOS 扩展命令手册》
  3. 《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》

导航目录

SOSEX 调试命令手册

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

.load sosex

.load C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\sosex.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>   显示字符串的长度的最大值。

参考资料







本文转自匠心十年博客园博客,原文链接:XXXXXXXX,如需转载请自行联系原作者
目录
相关文章
如何查看CentOS 7 虚拟机的IP地址
这篇文章介绍了如何在CentOS 7虚拟机中查看IP地址的方法。虽然具体内容没有提供,但通常在CentOS系统中,可以通过打开终端并使用`ifconfig`命令(或在最新版本中使用`ip addr`命令)来查看网络接口的IP地址。如果需要查看特定网络接口的详细信息,可以使用`ifconfig 接口名称`或`ip addr show 接口名称`。
如何查看CentOS 7 虚拟机的IP地址
|
11月前
|
消息中间件 开发框架 .NET
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
【11月更文挑战第7天】本文介绍了 ASP.NET Core 中的 `IHostedService` 和 `BackgroundService` 接口及其用途。`IHostedService` 定义了 `StartAsync` 和 `StopAsync` 方法,用于在应用启动和停止时执行异步操作,适用于资源初始化和清理等任务。`BackgroundService` 是 `IHostedService` 的抽象实现,简化了后台任务的编写,通过 `ExecuteAsync` 方法实现长时间运行的任务逻辑。文章还提供了创建和注册这两个服务的实战步骤,帮助开发者在实际项目中应用这些功能。
438 0
使用LabVIEW时遇到VISA属性错误 -1073807331的解决方案
使用LabVIEW时遇到VISA属性错误 -1073807331的解决方案
419 1
|
Java 调度
阻塞锁和自旋锁的理解
总体来说,自旋锁适用于锁定时间短、锁竞争不频繁的场景,而阻塞锁更适合锁定时间较长或锁竞争较频繁的场景。根据具体的应用需求选择合适的锁类型,可以优化系统性能。
214 0
|
机器学习/深度学习 存储 人工智能
量子计算与人工智能:探索两大前沿技术的结合
当谈到两个最令人兴奋的领域时,量子计算和人工智能都毫无疑问地处于前沿。这两个领域的结合潜力巨大,为解决一些传统计算难题和推动智能系统的发展带来了新的可能性。本文将探讨量子计算与人工智能的结合,并提供一个简单的代码案例来演示这种融合的潜力。
656 0
|
API Go 网络架构
Kratos 大乱炖 —— 整合其他Web框架:Gin、FastHttp、Hertz
Kratos默认的RPC框架使用的是gRPC,支持REST和protobuf两种通讯协议。其API都是使用protobuf定义的,REST协议是通过[grpc-gateway](https://github.com/grpc-ecosystem/grpc-gateway)转译实现的。使用protobuf定义API是具有极大优点的,具有很强的可读性、可维护性,以及工程性。工程再大,人员再多,也不会乱。 一切看起来都是很美好的。那么,问题来了,我们现在使用的是其他的Web框架,迁移就会有成本,有风险,不可能一下子就把历史存在的代码一口气转换过来到Kratos框架。那我可以在Kratos中整合其他
1132 0
|
数据采集 缓存 NoSQL
干货 | 使用布隆过滤器实现高效缓存
本文主要描述,使用布隆过滤实现高效缓存。文中采用数组做为缓存,如果需要高并发命中,则需将文中的数组换成Redis数据库。
干货 | 使用布隆过滤器实现高效缓存
|
数据采集 开发框架 数据挖掘
基于Python+Flask框架开发实现二手车数据爬取及分析
基于Python+Flask框架开发实现二手车数据爬取及分析
238 0
|
Docker 容器
【docker】重建docker0网桥
【docker】重建docker0网桥
637 0
|
测试技术
常见测试术语
提供和维护一个主测试计划( Master Testing Plan ),包含所有预期的测试活动和测试交付物。综合的测试计划应当结合总的项目和程序开发计划,并保证资源和责任在项目中尽可能早的被了解和分配。
1872 0