.NET 调试器扩展

使用 .NET 调试器扩展可以查看有关在 .NET 运行时中运行的代码的信息,这些代码同时在实时进程和转储上运行。 扩展预安装有 Windbg,并且可以 下载 以用于 LLDB。 可以使用 .NET 调试器扩展来:

  • 收集有关托管堆的信息。
  • 查找堆损坏。
  • 显示运行时使用的内部数据类型。
  • 查看有关运行时内运行的所有托管代码的信息。

.NET 调试器扩展包括现有 dotnet-sos 工具和新命令中的命令。 本机 AOT 运行时现在还支持有限的一组命令。

语法

在 windbg 下: ![command] [options]

在 LLDB 下:sos [command] [options]

许多命令在 LLDB 下都有别名或快捷方式:clrstack [options]

命令

下面的命令表也位于 “帮助”或 帮助下。 可以使用 soshelp <command>获取单个命令帮助。

命令 描述
bpmd [-nofuturemodule] [模块名称方法名称 ] [-md] -list-clear挂起断点编号-clearall 在指定模块中的指定方法处创建断点。

如果未加载指定的模块和方法,此命令将等待在创建断点之前加载模块并编译实时(JIT)的通知。

可以使用 -list-clear-clearall 选项来管理挂起断点的列表:

-list 选项生成所有挂起断点的列表。 如果挂起的断点具有非零模块 ID,该断点特定于该特定已加载模块中的函数。 如果挂起的断点具有零个模块 ID,则此断点适用于尚未加载的模块。

使用 -clear-clearall 选项从列表中删除挂起的断点。
CLRStack [-a -a] [-l] [-p] [-n] [-f] [-r] [-all] 仅提供托管代码的堆栈跟踪。

-p 选项显示托管函数的参数。

-l 选项显示帧中局部变量的相关信息。 .NET 调试器扩展无法检索本地名称,因此本地名称的输出格式 <本地地址>=<>。

-a 选项是组合的 -l-p 快捷方式。

-n 选项禁用源文件名称和行号的显示。 如果调试器具有指定的选项SYMOPT_LOAD_LINES,SOS 将查找每个托管帧的符号,如果成功,则显示相应的源文件名称和行号。 可以指定 -n (无行号) 参数来禁用此行为。

-f 选项(完整模式)显示本机帧与托管帧的混合它们以及托管帧的程序集名称和函数偏移量。 此选项在与 dotnet-dump一起使用时不显示本机帧。

-r 选项将转储每个堆栈帧的寄存器。

-all 选项将转储所有托管线程的堆栈。
COMState 列出每个线程的 COM 单元模型和一个 Context 指针(如果可用)。 此命令仅在 Windows 上受支持。
DumpArray [-<startIndex>] [-length<length>] [-details] [-nofields] <数组对象地址>

-或-

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] array 对象地址>
检查数组对象的元素。

-start 选项指定要在其中显示元素的起始索引。

长度 选项指定要显示的元素数。

-details 选项使用 DumpObjDumpVC 格式显示元素的详细信息。

-nofields 选项阻止数组显示。 仅当指定 -details 选项时,此选项才可用。
DumpAsyncdumpasync) [-mt<MethodTable 地址>] [-type<分部类型>名称 ] [-waiting] [-roots] DumpAsync 遍历垃圾回收的堆,并查找在异步方法的状态传输到堆时创建的表示异步状态机的对象。 此命令识别定义为 async voidasync Taskasync Task<T>async ValueTaskasync ValueTask<T>的异步状态机。

输出包含找到的每个异步状态机对象的详细信息块。 这些详细信息包括:
- 异步状态机对象的类型的行,包括其 MethodTable 地址、对象地址、大小和类型名称。
- 对象中包含的状态机类型名称的行。
- 状态计算机上的每个字段的列表。
- 如果已注册了一个或多个状态机对象的延续,则为该状态机对象的延续行。
- 发现了此异步状态机对象的 GC 根。

本机 AOT 应用程序支持。
DumpAssembly<程序集地址> 显示有关程序集的信息。

DumpAssembly 命令列出了多个模块(如果存在)。

可以使用 DumpDomain 命令获取程序集地址。
DumpClass<EEClass 地址> 显示与类型关联的 EEClass 结构的相关信息。

DumpClass 命令显示静态字段值,但不显示非静态字段值。

使用 DumpMTDumpObjName2EEToken2EE 命令获取 EEClass 结构地址。
DumpDomain [<域地址>] 枚举在指定 AppDomain 对象地址中加载的每个 Assembly 对象。 在没有参数的情况下调用时,DumpDomain 命令会列出进程中的所有 AppDomain 对象。 由于 .NET(Core)只有一个 AppDomainDumpDomain 只返回一个对象。
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable 地址>] [-type<分部类型>名称 ] [start [end]] 显示有关垃圾回收堆和有关对象的收集统计信息的信息。

如果 DumpHeap 命令检测到垃圾回收器堆中的碎片过多,则会显示警告。

-stat 选项将输出限制为统计类型摘要。

-strings 选项将输出限制为统计字符串值摘要。

-short 选项将输出限制为每个对象的地址。 通过此命令,可以轻松地将命令的输出传递给另一个自动化调试器命令。

-min 选项忽略小于以字节为单位指定 size 参数的对象。

-max 选项将忽略大于 size 参数的对象(以字节为单位)。

-thinlock 选项报告 ThinLocks。 有关详细信息,请参阅 SyncBlk 命令。

-startAtLowerBound 选项强制堆步行从提供的地址范围的下限开始。 在规划阶段,堆通常不可行走,因为对象正在移动。 此选项强制 DumpHeap 在指定的下限处开始其行走。 必须提供有效对象的地址作为此选项工作的下限。 可以在错误的对象的地址处显示内存,以手动查找下一个方法表。 如果垃圾回收当前正在调用 memcopy,则还可以通过将大小添加到作为参数提供的起始地址来查找下一个对象的地址。

-mt 选项仅列出与指定 MethodTable 结构对应的对象。

-type 选项仅列出类型名称为指定字符串的子字符串匹配的对象。

start 参数从指定地址开始列出。

end 参数停止在指定地址处列出。

本机 AOT 应用程序支持。
DumpIL<Managed DynamicMethod 对象> |<DynamicMethodDesc 指针> |<MethodDesc 指针> 显示与托管方法关联的公共中间语言(CIL)。

动态 CIL 的发出方式不同于从程序集加载的 CIL。 动态 CIL 是指托管对象数组中的对象,而不是元数据令牌。
DumpLock [--allthreads] [--waits] 显示有关 System.Threading.Lock 对象的信息,例如线程所持有的对象(默认值),或由线程等待的对象。
DumpLog [-addr<addressOfStressLog>] [<Filename>] 将内存中压力日志的内容写入指定文件。 如果未指定名称,此命令将在当前目录中创建名为 StressLog.txt 的文件。

内存中压力日志可帮助你诊断压力故障,而无需使用锁或 I/O。 若要启用压力日志,请将以下注册表项设置为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework:

(DWORD)StressLog = 1

(DWORD)LogFacility = 0xffffffff

(DWORD)StressLogSize = 65536

可选 -addr 选项允许指定非默认日志的压力日志。

本机 AOT 应用程序支持。
DumpMD<MethodDesc 地址> 显示有关指定地址处 MethodDesc 结构的信息。

可以使用 IP2MD 命令从托管函数获取 MethodDesc 结构地址。
DumpMT [-MD] <MethodTable 地址> 显示有关指定地址处的方法表的信息。 指定 -MD 选项将显示使用对象定义的所有方法的列表。

每个托管对象都包含一个方法表指针。
DumpModule [-mt] <模块地址> 显示有关指定地址的模块的信息。 -mt 选项显示模块中定义的类型和模块引用的类型

可以使用 DumpDomainDumpAssembly 命令来检索模块的地址。
DumpObj [-nofields] <对象地址>

-或-

DO<对象地址>
显示有关指定地址处的对象的信息。 DumpObj 命令显示字段、EEClass 结构信息、方法表和对象的大小。

可以使用 DumpStackObjects 命令检索对象的地址。

可以在 CLASS 类型的字段上运行 DumpObj 命令,因为它们也是对象。

- nofields 选项阻止显示对象的字段,这对于字符串等对象非常有用。
DumpRuntimeTypes 显示垃圾回收器堆中的运行时类型对象,并列出其关联的类型名称和方法表。
DumpStack [-EE] [-n] [top堆栈 [bottom堆栈]] 显示堆栈跟踪。

-EE 选项会导致 DumpStack 命令仅显示托管函数。 使用 topbottom 参数来限制 x86 平台上显示的堆栈帧。

-n 选项禁用源文件名称和行号的显示。 如果调试器具有指定的选项SYMOPT_LOAD_LINES,SOS 将查找每个托管帧的符号,如果成功显示相应的源文件名称和行号。 可以指定 -n (无行号) 参数来禁用此行为。
DumpSig<sigaddr><moduleaddr> 显示有关指定地址处 Sig 结构的信息。
DumpSigElem<sigaddr><moduleaddr> 显示签名对象的单个元素。 在大多数情况下,应使用 DumpSig 来查看单个签名对象。 但是,如果签名以某种方式损坏,则可以使用 DumpSigElem 读取其有效部分。
DumpStackObjects [-verify] [topstack [bottomstack]]

-或-

DSO [-verify] [top堆栈 [bottom堆栈]]
显示当前堆栈边界内找到的所有托管对象。

-verify 选项验证对象字段的每个非静态 CLASS 字段。

DumpStackObject 命令与堆栈跟踪命令(如 K (windbg) 或 bt (lldb)以及 clrstack 命令配合使用来确定局部变量和参数的值。
DumpVC<MethodTable 地址><地址> 显示有关指定地址处值类的字段的信息。

MethodTable 参数允许 DumpVC 命令正确解释字段。 值类没有方法表作为其第一个字段。
EEHeap [-gc] [-loader] 显示有关内部运行时数据结构消耗的进程内存的信息。

-gc-loader 选项将此命令的输出限制为垃圾回收器或加载程序数据结构。

垃圾回收器的信息列出了托管堆中每个段的范围。 如果指针位于由 -gc给出的段范围内,则指针是对象指针。
EEStack [-short] [-EE] 在进程中的所有线程上运行 DumpStack 命令。

-EE 选项直接传递给 DumpStack 命令。 -short 参数将输出限制为以下类型的线程:

已锁定的线程。

为了允许垃圾回收而停止的线程。

当前位于托管代码中的线程。
EHInfo [<MethodDesc address>] [<Code address>] 显示指定方法中的异常处理块。 此命令显示子句块(try 块)和处理程序块(catch 块)的代码地址和偏移量。
常见问题解答 显示常见问题。 dotnet-dump不支持 。
FinalizeQueue [-detail] |[-allReady][-short] 显示注册以进行最终化的所有对象。

-detail 选项显示有关需要清理的任何 SyncBlocks 以及等待清理的任何 RuntimeCallableWrappers(RCW)的额外信息。 这两个数据结构在运行时由终结器线程缓存和清理。

-allReady 选项显示所有已准备好进行最终化的对象,无论它们是否已由垃圾回收标记,还是将由下一个垃圾回收标记。 “准备完成”列表中的对象是不再具有根目录的可终结对象。 此选项可能很昂贵,因为它会验证可终结队列中的所有对象是否仍为根。

-short 选项将输出限制为每个对象的地址。 如果它与 -allReady一起使用,它将枚举具有不再根化终结器的所有对象。 如果独立使用,则会列出可终结和“准备完成”队列中的所有对象。
FindAppDomain<对象地址> 确定指定地址处对象的应用程序域。
FindRoots-gen<N> |-gen 任何 |<对象地址> 使调试器在指定代系的下一个集合中中断调试器。 中断发生后立即重置效果。 若要中断下一个集合,必须重新发出命令。 <对象地址> 形式的此命令在发生 -gen-gen 导致的任何 中断后使用。 此时,调试对象处于正确的状态,FindRoots,以识别当前受谴责的几代人中对象的根。 仅在 Windows 上受支持。
GCHandles [-perdomain] 显示有关进程中垃圾回收器句柄的统计信息。

-perdomain 选项按应用程序域排列统计信息。

使用 GCHandles 命令查找垃圾回收器处理泄漏导致的内存泄漏。 例如,当代码保留大型数组时,会发生内存泄漏,因为强垃圾回收器句柄仍指向该数组,并且该句柄会被丢弃,而不会释放它。

仅在 Windows 上受支持。
GCHandleLeaks 在内存中搜索对强垃圾回收器句柄和固定垃圾回收器句柄的任何引用,并显示结果。 如果找到句柄,GCHandleLeaks 命令将显示引用的地址。 如果在内存中找不到句柄,此命令将显示通知。 仅在 Windows 上受支持。
GCInfo<MethodDesc 地址><代码地址> 显示指示寄存器或堆栈位置何时包含托管对象的数据。 如果发生垃圾回收,收集器必须知道对对象的引用位置,以便它可以使用新的对象指针值更新它们。
GCRoot [-nostacks] [-all] <对象地址> 显示有关指定地址处对象的引用(或根)的信息。

GCRoot 命令检查整个托管堆和句柄表,了解堆栈上其他对象和句柄内的句柄。 然后搜索每个堆栈以指向对象的指针,并且还会搜索终结器队列。

此命令不确定是否堆栈根有效或被丢弃。 使用 clrstackU 命令来反汇编本地或参数值所属的帧,以确定堆栈根是否仍在使用。

-nostacks 选项将搜索限制为垃圾回收器句柄和可访问对象。

-all 选项强制显示所有根,而不仅仅是唯一的根。
GCWhere<对象地址> 显示传入的参数垃圾回收堆中的位置和大小。 如果参数位于托管堆中,但不是有效的对象地址,则大小显示为 0(零)。
帮助soshelp) [<命令>] [faq] 如果未指定任何参数,或显示有关指定命令的详细帮助信息,则显示所有可用的命令。

faq 参数显示常见问题的解答。
HeapStat [-inclUnrooted | -iu] 显示每个堆的生成大小以及每个堆上每一代的总可用空间。 如果指定了 -inclUnrooted 选项,则报告将包含有关不再植根的垃圾回收堆中的托管对象的信息。 仅在 Windows 上受支持。
HistClear 释放 Hist 命令系列使用的任何资源。

通常,无需显式调用 HistClear,因为每个 HistInit 都会清理以前的资源。
HistInit 从保存在调试对象中的压力日志初始化 SOS 结构。
HistObj<obj_address> 检查所有压力日志重定位记录,并显示可能导致地址作为参数传入的垃圾回收重定位链。
HistObjFind<obj_address> 显示引用指定地址处对象的所有日志条目。
HistRoot<根> 显示与指定根的升级和重定位相关的信息。

根值可用于跟踪对象通过垃圾回收移动。
IP2MDip2md) <代码地址> 在已编译 JIT 的代码中的指定地址处显示 MethodDesc 结构。
ListNearObjlno<obj_address> 显示前面和后面的指定地址的对象。 该命令在垃圾回收堆中查找地址,该地址类似于托管对象的有效开头(基于有效方法表)和参数地址后面的对象。 仅在 Windows 上受支持。
MinidumpMode [0] [1] 使用小型转储时,防止运行不安全的命令。

传递 0 以禁用此功能或 1 以启用此功能。 默认情况下,MinidumpMode 值设置为 0

使用 .dump /m 命令创建的小型转储或 .dump 命令具有有限的 CLR 特定数据,并允许仅正确运行一部分 SOS 命令。 某些命令可能会失败并出现意外错误,因为所需的内存区域未映射或仅部分映射。 此选项可保护你免受针对 minidumps 的不安全命令的运行。

仅支持 Windbg。
Name2EEname2ee) <模块名称><类型或方法名称>

-或-

Name2EE<模块名称><类型或方法名称>
显示指定模块中指定类型或方法的 MethodTable 结构和 EEClass 结构。

必须在进程中加载指定的模块。

若要获取正确的类型名称,请使用 Ildasm.exe(IL 反汇编程序)浏览模块。 还可以将 * 作为模块名称参数传递,以搜索所有加载的托管模块。 模块名称 参数也可以是模块的调试器名称,例如 mscorlibimage00400000

此命令支持 <module>!<type>的 Windows 调试器语法。 类型必须完全限定。
ObjSize [<对象地址>] |[-aggregate][-stat] 显示指定对象的大小。 如果未指定任何参数,则 ObjSize 命令显示托管线程上发现的所有对象的大小、显示进程中的所有垃圾回收器句柄以及这些句柄指向的任何对象的大小。 除了父对象之外,ObjSize 命令还包括所有子对象的大小。

-aggregate 选项可以与 -stat 参数一起使用,以获取仍为根的类型的详细视图。 通过使用 !dumpheap -stat!objsize -aggregate -stat,可以确定哪些对象不再根化并诊断各种内存问题。

仅在 Windows 上受支持。
PrintException [-nested] [-lines] [<Exception 对象地址>]

-或-

PE [-nested] [<Exception 对象地址>]
显示和设置派生自指定地址处 Exception 类的任何对象的字段的格式。 如果未指定地址,PrintException 命令将显示当前线程上引发的最后一个异常。

-nested 选项显示有关嵌套异常对象的详细信息。

选项显示源信息(如果可用)。

可以使用此命令格式化和查看 _stackTrace 字段,该字段是二进制数组。
ProcInfo [-env] [-time] [-mem] 显示进程、内核 CPU 时间和内存使用情况统计信息的环境变量。 仅支持 Windbg。
RCWCleanupList<RCWCleanupList 地址> 显示等待清理的指定地址的运行时可调用包装器列表。 仅支持 Windbg。
SaveModule<基址><文件名> 将内存中加载到指定地址的映像写入指定文件。 仅支持 Windbg。
SetHostRuntime [<runtime-directory>] 此命令设置 .NET 运行时的路径,用于托管在调试器(LLDB)中作为 SOS 一部分运行的托管代码。 运行时至少需要版本 2.1.0 或更高版本。 如果目录中存在空格,则需要单引号(')。

通常,SOS 会尝试查找已安装的 .NET 运行时以自动运行其托管代码,但如果命令失败,则此命令可用。 默认值是使用相同的运行时(libcoreclr)进行调试。 如果调试的默认运行时无法运行 SOS 代码,或者版本小于 2.1.0,请使用此命令。

如果在运行 SOS 命令时收到以下错误消息,请使用此命令将路径设置为 2.1.0 或更高版本的 .NET 运行时。

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

可以在命令行界面中使用“dotnet --info”来查找已安装的 .NET 运行时的路径。
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cachecache-path] [-directorysearch-directory] [-sympathwindows-symbol-path] [symbol-server-URL] 启用符号服务器下载支持。

-ms 选项允许从公共Microsoft符号服务器下载。

-disable 选项打开符号下载支持。

-cache<cache-path> 选项指定符号缓存目录。 默认值为 $HOME/.dotnet/symbolcache(如果未指定)。

-directory 选项添加用于搜索符号的路径。 可以是多个。

-sympath 选项以 Windows 符号路径格式添加服务器、缓存和目录路径。

-log 选项启用符号下载日志记录。

-loadsymbols 选项尝试下载运行时的本机 .NET 符号。 在 lldb 和 dotnet-dump 上受支持。
SOSFlush 刷新内部 SOS 缓存。
SOSStatus [-reset] 显示内部 SOS 状态或重置内部缓存状态。
StopOnException [-derived] [-create | -create2] <异常><伪寄存器编号> 导致调试器在引发指定的异常时停止,但在引发其他异常时继续运行。

派生 选项捕获指定的异常和派生自指定异常的每个异常。

仅支持 Windbg。
SyncBlk [-all | <syncblk number>] 显示指定的 SyncBlock 结构或所有 SyncBlock 结构。 如果不传递任何参数,则 SyncBlk 命令将显示与线程拥有的对象对应的 SyncBlock 结构。

SyncBlock 结构是一个容器,用于获取不需要为每个对象创建的额外信息。 它可以保存 COM 互操作数据、哈希代码以及线程安全操作的锁定信息。
ThreadPool 显示有关托管线程池的信息,包括队列中的工作请求数、完成端口线程数和计时器数。
线程clrthreads) [-live] [-special] 显示进程中的所有托管线程。

Threads 命令显示调试器速记 ID、CLR 线程 ID 和操作系统线程 ID。 此外,Threads 命令显示一个域列,该列指示在其中执行线程的应用程序域、显示 COM 单元模式的 APT 列,以及显示线程中引发的最后一个异常的异常列。

-live 选项显示与实时线程关联的线程。

-special 选项显示 CLR 创建的所有特殊线程。 特殊线程包括垃圾回收线程(在并发和服务器垃圾回收中)、调试器帮助程序线程、终结器线程、AppDomain 卸载线程和线程池计时器线程。

本机 AOT 应用程序支持。
ThreadState <State 值字段> 显示线程的状态。 value 参数是 线程 报表输出中 State 字段的值。
Token2EE<模块名称><令牌> 将指定模块中的指定元数据令牌转换为 MethodTable 结构或 MethodDesc 结构。

可以为模块名称参数传递 *,以查找该令牌在每个加载的托管模块中映射到的内容。 还可以传递模块的调试器名称,例如 mscorlibimage00400000
U [-gcinfo] [-ehinfo] [-n] <MethodDesc address> |<代码地址> 显示由方法的 MethodDesc 结构指针或方法正文中的代码地址指定的托管方法的带批注反汇编。 U 命令显示从头到尾的整个方法,其中包含将元数据令牌转换为名称的注释。

-gcinfo 选项会导致 U 命令显示方法的 GCInfo 结构。

-ehinfo 选项显示方法的异常信息。 还可以使用 EHInfo 命令获取此信息。

-n 选项禁用源文件名称和行号的显示。 如果调试器具有指定的选项SYMOPT_LOAD_LINES,SOS 将查找每个托管帧的符号,如果成功,则显示相应的源文件名称和行号。 可以指定 -n 选项来禁用此行为。
VerifyHeap 检查垃圾回收器堆是否有损坏的迹象,并显示发现的任何错误。

堆损坏可能是由错误构造的平台调用引起的。

本机 AOT 应用程序支持。
VerifyObj<对象地址> 检查作为参数传递的对象是否有损坏的迹象。 仅在 Windows 上受支持。
VMMap 遍历虚拟地址空间,并显示应用于每个区域的保护类型。 仅支持 Windbg。
VMStat 提供虚拟地址空间的摘要视图,按应用于该内存的每种保护类型排序(可用、保留、已提交、专用、映射、映像)。 TOTAL 列显示 AVERAGE 列的结果乘以 BLK COUNT 列。 仅支持 Windbg。

Windows 调试器

还可以通过将 .NET 调试器扩展加载到 WinDbg/dbg 调试器 并在 Windows 调试器中执行命令来使用 .NET 调试器扩展。 这些命令可用于实时进程或转储。

每当调试的进程包含 .NET 运行时(coreclr.dll 或 libcoreclr.so)时,Windbg 应自动加载扩展。

LLDB 调试器

有关为 LLDB 配置 .NET 调试器扩展的说明,请参阅 dotnet-debugger-extensions。 这些命令可用于实时进程或转储。

默认情况下,可以通过输入:sos [command_name]来访问所有命令。 但是,常用命令已被别名化,因此不需要 sos 前缀:

命令 功能
analyzeoom 显示对 GC 堆的分配请求上发生的最后一个 OOM 的信息。
bpmd 在指定模块中的指定托管方法处创建断点。
clrmodules 列出进程中的托管模块。
clrstack 仅提供托管代码的堆栈跟踪。
clrthreads 列出正在运行的托管线程。
clru 显示托管方法的带批注反汇编。
dbgout 启用/禁用 (-off) 内部 SOS 日志记录。
dso 显示当前堆栈边界内找到的所有托管对象。
dumpalc 显示有关加载指定对象的可收集 AssemblyLoadContext 的详细信息。
dumparray 显示有关托管数组的详细信息。
dumpasync 显示有关垃圾回收堆上的异步状态机的信息。
dumpassembly 显示有关程序集的详细信息。
dumpclass 显示有关指定地址处 EEClass 结构的信息。
dumpconcurrentdictionary 显示并发字典内容。
dumpconcurrentqueue 显示并发队列内容。
dumpdelegate 显示有关委托的信息。
dumpdomain 显示所有 AppDomains 或指定程序集中的所有程序集的相关信息。
dumpgcdata 显示有关 GC 数据的信息。
dumpgen 显示指定生成的堆内容。
dumpheap 显示有关垃圾回收堆和有关对象的收集统计信息的信息。
dumpil 显示与托管方法关联的公共中间语言(CIL)。
dumplock 显示有关 System.Threading.Lock 对象的信息,例如线程所持有的对象(默认值),或由线程等待的对象。 此命令仅在 .NET 调试器扩展 中提供。
dumplog 将内存中压力日志的内容写入指定文件。
dumpmd 显示有关指定地址处 MethodDesc 结构的信息。
dumpmodule 显示有关指定地址处模块的信息。
dumpmt 显示有关指定地址处的方法表的信息。
dumpobj 显示指定地址处的对象的信息。
dumpruntimetypes 查找 GC 堆中的所有 System.RuntimeType 对象,并输出它们引用的类型名称和 MethodTable。
dumpsig 转储由 <sigaddr> <moduleaddr>指定的方法或字段的签名。
dumpsigelem 转储签名对象的单个元素。
dumpstack 显示本机和托管堆栈跟踪。
dumpstackobjects 显示当前堆栈边界内找到的所有托管对象。
dumpvc 显示有关值类字段的信息。
eeheap 显示有关内部运行时数据结构消耗的进程内存的信息。
eestack 在进程中的所有线程上运行 dumpstack
eeversion 显示有关运行时和 SOS 版本的信息。
ehinfo 在 JIT ed 方法中显示异常处理块。
finalizequeue 显示注册以进行最终化的所有对象。
findappdomain 尝试解析 GC 对象的 AppDomain。
findroots 查找和显示 GC 集合中的对象根。
gchandles 显示有关进程中垃圾回收器句柄的统计信息。
gcheapstat 显示有关垃圾回收器的统计信息。
gcinfo 显示方法的 JIT GC 编码。
gcroot 显示有关指定地址处对象的引用(或根)的信息。
gcwhere 显示指定地址的 GC 堆中的位置。
histclear 释放 Hist 命令系列使用的任何资源。
histinit 从保存在调试对象中的压力日志初始化 SOS 结构。
histobj 检查所有压力日志重定位记录,并显示可能导致地址作为参数传入的垃圾回收重定位链。
histobjfind 显示引用指定地址处对象的所有日志条目。
histroot 显示与指定根的升级和重定位相关的信息。
histstats 显示压力日志统计信息。
ip2md 在已编译 JIT 的代码中的指定地址处显示 MethodDesc 结构。
listnearobj 显示前面和接替指定地址的对象。
loadsymbols 加载 .NET 本机模块符号。
logging 启用/禁用内部 SOS 日志记录。
name2ee 显示指定模块中指定类型或方法的 MethodTableEEClass 结构。
objsize 显示指定对象的大小。
parallelstacks 显示与 Visual Studio“并行堆栈”面板类似的合并线程堆栈。
pathto 显示从 <root><target>的 GC 路径。
pe 显示和设置派生自指定地址处 Exception 类的任何对象的字段的格式。
printexception 显示和设置派生自指定地址处 Exception 类的任何对象的字段的格式。
runtimes 列出目标中的运行时或更改默认运行时。
stoponcatch 目标进程将在执行期间下次捕获托管异常时中断。
setclrpath 设置加载 coreclr dac/dbi 文件的路径。 setclrpath <path>
sethostruntime 设置或显示用于在 SOS 中运行托管代码的 .NET 运行时目录。
setsymbolserver 启用符号服务器支持。
setsostid 设置当前的 OS tid/thread 索引,而不是使用 LLDB 提供的索引。 setsostid <tid> <index>
sos 执行各种 coreclr 调试命令。 使用语法 sos <command-name> <args>。 有关详细信息,请参阅“soshelp”。
soshelp 如果未指定任何参数,则显示所有可用的命令,或显示有关指定命令的详细帮助信息:soshelp <command>
syncblk 显示 SyncBlock 持有者信息。
taskstate 以人工可读格式显示任务状态。
threadpool 显示有关运行时线程池的信息。
threadpoolqueue 显示排队的线程池工作项。
threadstate 漂亮的打印线程状态的含义。
timerinfo 显示有关运行计时器的信息。
token2ee 显示指定令牌和模块的 MethodTable 结构和 MethodDesc 结构。
traverseheap 以 CLR 探查器所理解的格式将堆信息写入文件。
verifyheap 检查 GC 堆是否存在损坏迹象。
verifyobj 检查作为参数传递的对象是否有损坏的迹象。

Windbg/cdb 示例用法

命令 描述
!dumparray -start 2 -length 5 -details 00ad28d0 显示地址 00ad28d0处数组的内容。 显示从第二个元素开始,并继续五个元素。
!dumpassembly 1ca248 在地址 1ca248显示程序集的内容。
!dumpheap 显示有关垃圾回收器堆的信息。
!DumpLog 将内存中压力日志的内容写入当前目录中名为 StressLog.txt 的(默认)文件。
!dumpmd 902f40 显示地址 902f40处的 MethodDesc 结构。
!dumpmodule 1caa50 在地址 1caa50显示有关模块的信息。
!DumpObj a79d40 显示地址 a79d40对象的相关信息。
!DumpVC 0090320c 00a79d9c 使用地址 0090320c的方法表在地址 00a79d9c 显示值类的字段。
!eeheap -gc 显示垃圾回收器使用的进程内存。
!finalizequeue 显示计划进行最终化的所有对象。
!findappdomain 00a79d98 确定地址 00a79d98对象的应用程序域。
!gcinfo 5b68dbb8 显示当前进程中的所有垃圾回收器句柄。
!name2ee unittest.exe MainClass.Main 显示模块 unittest.exeMainClassMain 方法的 MethodTableEEClass 结构。
!token2ee unittest.exe 02000003 显示模块 unittest.exe中地址 02000003 元数据令牌的相关信息。

LLDB 示例用法

命令 描述
dumparray -start 2 -length 5 -details 00ad28d0 显示地址 00ad28d0处数组的内容。 显示从第二个元素开始,并继续五个元素。
dumpassembly 1ca248 在地址 1ca248显示程序集的内容。
dumpheap 显示有关垃圾回收器堆的信息。
dumplog 将内存中压力日志的内容写入当前目录中名为 StressLog.txt 的(默认)文件。
dumpmd 902f40 显示地址 902f40处的 MethodDesc 结构。
dumpmodule 1caa50 在地址 1caa50显示有关模块的信息。
dumpobj a79d40 显示地址 a79d40对象的相关信息。
dumpvc 0090320c 00a79d9c 使用地址 0090320c的方法表在地址 00a79d9c 显示值类的字段。
eeheap -gc 显示垃圾回收器使用的进程内存。
findappdomain 00a79d98 确定地址 00a79d98对象的应用程序域。
gcinfo 5b68dbb8 显示当前进程中的所有垃圾回收器句柄。
name2ee unittest.exe MainClass.Main 显示模块 unittest.exeMainClassMain 方法的 MethodTableEEClass 结构。
token2ee unittest.exe 02000003 显示模块 unittest.exe中地址 02000003 元数据令牌的相关信息。
clrthreads 显示托管线程。

另请参阅