概述:.NET 调试命令。主要是 SOS (Son of Strike) 提供的能力

参考文章:.NET 的 SOS 调试扩展 - .NET | Microsoft Learn

[toc]

LLDB 调试程序

有关针对 LLDB 配置 SOS 的说明,请参阅 dotnet-sos。 可对实时进程或转储使用 SOS 命令。

默认情况下,可以通过输入以下内容来使用所有 SOS 命令: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显示有关所有 AppDomain 或指定 AppDomain 中的所有程序集的信息。
dumpgcdata显示有关 GC 数据的信息。
dumpgen显示指定代系的堆内容。
dumpheap显示有关垃圾回收堆的信息和有关对象的收集统计信息。
dumpil显示与托管方法关联的公共中间语言(CIL)。
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 方法中的异常处理块。
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 示例用法

展开表

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

LLDB 示例用法

展开表

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