【调试技术】.Net 调试基础命令

概述:.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 显示托管线程。

【调试技术】.Net 调试基础命令
https://hodlyounger.github.io/wiki/调试技术/【调试技术】.Net 调试基础命令/
作者
mingming
发布于
2024年7月1日
许可协议