【调试技术】.Net 调试基础命令
概述:.Net 调试命令。主要是 SOS (Son of Strike) 提供的能力
[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 |
显示指定模块中的指定类型或方法的 MethodTable 和 EEClass 结构。 |
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 方法的 MethodTable 和 EEClass 结构。 |
!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 方法的 MethodTable 和 EEClass 结构。 |
token2ee unittest.exe 02000003 |
显示有关模块 unittest.exe 中的地址 02000003 处的元数据标记的信息。 |
clrthreads |
显示托管线程。 |
【调试技术】.Net 调试基础命令
https://hodlyounger.github.io/2024/07/01/wiki/调试技术/【调试技术】.Net 调试基础命令/