|
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
|
译文
原文
|
Windows 驱动程序工具包 (WDK)。
|
|
|---|
|
如果使用的是 Visual Studio 2013,则 Visual Studio 中的 Windows 调试器支持 SOS.dll,但 Visual Studio 调试器的“即时”窗口不支持 SOS.dll。 |
![command] [options]
|
命令 |
说明 |
|---|---|
|
AnalyzeOOM (ao) |
显示对垃圾回收堆进行分配请求时发生的最后 OOM 的信息。(在服务器垃圾回收中,它将在每个垃圾回收堆上显示 OOM(如果有))。 |
|
pending breakpoint number> -clearall |
在指定模块中的指定方法处创建断点。 如果尚未加载指定的模块和方法,则此命令将在创建断点之前等待已加载并进行实时 (JIT) 编译的模块的通知。 你可以通过使用 -list、-clear 和 -clearall 选项来管理挂起断点的列表:
|
|
CLRStack [-a] [-l] [-p] [-n] |
仅提供托管代码的堆栈跟踪。
在基于 x64 和 IA-64 的平台上,SOS 调试扩展不显示过渡帧。 |
|
COMState |
Context 指针(如果可用)。 |
|
array object address> - 或 - array object address> |
检查数组对象的元素。
|
|
assembly address> |
显示有关程序集的信息。 DumpAssembly 命令将列出多个模块(如果存在)。 可以通过使用 DumpDomain 命令获取程序集地址。 |
|
EEClass address> |
EEClass 结构的信息。 DumpClass 命令显示静态字段值,但不显示非静态字段值。 EEClass 结构地址。 |
|
domain address>] |
AppDomain 对象。 |
|
end]] |
显示有关垃圾回收堆的信息和有关对象的收集统计信息。 如果 DumpHeap 命令在垃圾回收器堆中检测到过多碎片,将会显示警告。
|
|
MethodDesc pointer> |
显示与托管方法关联的 Microsoft 中间语言 (MSIL)。 动态 MSIL 引用托管对象数组中的对象而不是引用元数据标记。 |
|
e>] |
如果你不指定名称,则此命令将在当前目录中创建一个名为 StressLog.txt 的文件。 若要启用压力日志,请在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework 下设置以下注册表项: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 -addr 选项,你可以指定压力日志而非默认日志。 |
|
MethodDesc address> |
MethodDesc 结构的信息。 MethodDesc 结构地址。 |
|
MethodTable address> |
指定 -MD 选项将显示与对象一起定义的所有方法的列表。 每个托管对象均包含一个方法表指针。 |
|
r> |
MethodSig 结构的信息。 |
|
Module address> |
-mt 选项显示模块中定义的类型和模块所引用的类型。 可以使用 DumpDomain 或 DumpAssembly 命令检索模块的地址。 |
|
object address> - 或 - object address> |
EEClass 结构信息、方法表和大小。 可以使用 DumpStackObjects 命令检索对象的地址。 CLASS 类型的字段运行 DumpObj 命令,因为这些字段也是对象。 - nofields 选项可阻止显示对象的字段,它对 String 这样的对象很有用。 |
|
DumpRuntimeTypes |
显示垃圾回收器堆中的运行时类型对象并列出其关联的类型名称和方法表。 |
|
k]] |
显示堆栈跟踪。
在 x86 和 x64 平台上,DumpStack 命令将创建详细的堆栈跟踪。 bottom 参数。 |
|
moduleaddr> |
Sig 结构的信息。 |
|
moduleaddr> |
但是,如果签名已在某种程度上被损坏,则可使用DumpSigElem 读取它的有效部分。 |
|
stack]] - 或 - stack]] |
显示在当前堆栈的边界内找到的所有托管对象。 CLASS 字段。 将 DumpStackObject 命令与堆栈跟踪命令(如 K 命令和 CLRStack 命令)一起使用以确定局部变量和参数的值。 |
|
Address> |
显示有关指定地址处的值类字段的信息。 值类不将方法表作为其第一个字段。 |
|
EEHeap [-gc] [-loader] |
显示有关内部公共语言运行时数据结构所使用的进程内存的信息。 -gc 和 -loader 选项将此命令的输出限制为垃圾回收器或加载程序数据结构。 有关垃圾回收器的信息列出了托管堆中每个段的范围。如果指针落在由 -gc 给出的段范围内,则该指针是一个对象指针。 |
|
EEStack [-short] [-EE] |
对一个进程中的所有线程运行 DumpStack 命令。 -short 参数将输出限制为以下类型的线程:
|
|
EEVersion |
显示公共语言运行时版本。 |
|
Code address>]
|
catch 块)的代码地址和偏移量。 |
|
FAQ |
显示常见问题。 |
|
FinalizeQueue [-detail] | [-allReady] [-short] |
显示所有已进行终结注册的对象。
|
|
Object address> |
确定指定地址处的对象的应用程序域。 |
|
object address> |
此时,调试对象处于正确的状态,以便FindRoots 从当前已报废的生成中识别出对象的根。 |
|
GCHandles [-perdomain] |
显示有关进程中的垃圾回收器句柄的统计信息。 -perdomain 选项将按应用程序域排列统计信息。 例如,当代码由于强垃圾回收器句柄仍指向一个大型数组而保留该数组时,若不释放句柄就将其放弃,则会发生内存泄漏。 |
|
GCHandleLeaks |
如果在内存中找不到句柄,此命令将显示一个通知。 |
|
Code address> |
如果发生垃圾回收,回收器必须知道对象引用的位置,以便可以使用新的对象指针值更新相应的对象引用。 |
|
Object address> |
显示有关对指定地址处的对象的引用(或根)的信息。 然后,在每个堆栈中搜索对象的指针,同时还搜索终结器队列。 使用 CLRStack 和 U 命令可对本地或参数值所属的帧进行反汇编,以便确定堆栈根是否仍在使用中。 -nostacks 选项将搜索限制为垃圾回收器句柄和 Freachable 对象。 |
|
<object address> |
如果参数位于托管堆中,但不是有效的对象地址,则大小显示为 0(零)。 |
|
faq] |
在未指定参数时显示所有可用命令,或者显示有关指定命令的详细帮助信息。 faq 参数显示常见问题的答案。 |
|
-iu] |
如果指定 -inclUnrooted 选项,则报告将包括有关不再为根的垃圾回收堆中的托管对象的信息。 |
|
HistClear |
Hist 命令系列使用的任何资源。 HistInit 都会清理以前的资源。 |
|
HistInit |
从保存在调试对象中的压力日志初始化 SOS 结构。 |
|
<obj_address> |
检查所有压力日志的重定位记录,并显示可能已将地址作为参数传入的垃圾回收重定位链。 |
|
<obj_address> |
显示在指定地址处引用对象的所有日志项。 |
|
<root> |
显示与指定根的提升和重定位相关的信息。 根值可用于通过垃圾回收来跟踪对象的移动。 |
|
Code address> |
MethodDesc 结构。 |
|
<obj_address> |
该命令在垃圾回收堆和参数地址之后的对象中寻找地址,而该垃圾回收堆看上去像托管对象(基于有效的方法表)的有效开头。 |
|
MinidumpMode [0] [1]
|
防止在使用小型转储时运行不安全的命令。 默认情况下,MinidumpMode 值设置为 0。 此选项可防止你对小型转储运行不安全的命令。 |
|
type or method name> - 或 - type or method name> |
EEClass 结构。 在进程中必须加载指定的模块。 image00400000。 类型必须是完全限定的。 |
|
Object address>] | [-aggregate] [-stat] |
除父对象之外,ObjSize 命令还包括所有子对象的大小。 通过使用 !dumpheap -stat 和 !objsize -aggregate -stat,可以确定不再为根的对象并诊断各种内存问题。 |
|
Exception object address>] - 或 - Exception object address>] |
如果不指定地址,PrintException 命令将显示在当前线程上引发的最后一个异常。
_stackTrace 字段的格式并查看该字段(它是一个二进制数组)。 |
|
ProcInfo [-env] [-time] [-mem] |
显示进程的环境变量、内核 CPU 时间和内存使用统计信息。 |
|
RCWCleanupList address> |
显示在指定地址处等待清理的运行时可调用包装器的列表。 |
|
Filename> |
将加载到内存中指定地址的图像写入指定文件。 |
|
SOSFlush |
刷新内部 SOS 缓存。 |
|
Pseudo-register number> |
使调试器在引发指定异常时停止,但在引发其他异常时继续运行。 -derived 选项用于捕获指定异常以及从指定异常派生的每个异常。 |
|
syncblk number>] |
SyncBlock 结构。 它可以存放 COM 互操作数据、哈希代码和用于线程安全操作的锁定信息。 |
|
ThreadPool |
显示有关托管线程池的信息,包括队列中工作请求的数目、完成端口线程的数目和计时器的数目。 |
|
token> |
MethodDesc 结构。 image00400000。 |
|
Threads [-live] [-special] |
显示进程中的所有托管线程。 Threads 命令显示调试器速记 ID、公共语言运行时线程 ID 以及操作系统线程 ID。此外,Threads 命令还会显示“Domain”列、“APT”列和“Exception”列,这三列分别用于指示正在执行某线程的应用程序域、显示 COM 单元模式以及显示该线程中引发的上一个异常。
|
|
State value field > |
State 字段的值。 示例: 0:003> !Threads
ThreadCount: 2
UnstartedThread: 0
BackgroundThread: 1
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive GC Alloc Lock
ID OSID ThreadOBJ State GC Context Domain Count APT Exception
0 1 250 0019b068 a020 Disabled 02349668:02349fe8 0015def0 0 MTA
2 2 944 001a6020 b220 Enabled 00000000:00000000 0015def0 0 MTA (Finalizer)
0:003> !ThreadState b220
Legal to Join
Background
CLR Owns
CoInitialized
In Multi Threaded Apartment
|
|
filename> |
-xml 选项使 TraverseHeap 命令将文件格式化为 XML。 Microsoft 下载中心下载 CLR 探查器。 |
|
Code address> |
U 命令将从开始到结束显示整个方法,并带有将元数据标记转换为名称的批注。
|
|
VerifyHeap |
检查垃圾回收器堆中是否有损坏迹象,并显示找到的任何错误。 错误构造的平台调用可能导致堆损坏。 |
|
object address> |
检查作为参数传递的对象是否有损坏迹象。 |
|
VMMap |
遍历虚拟地址空间并显示应用于每个区域的保护类型。 |
|
VMStat |
“TOTAL”列显示“AVERAGE”列乘以“BLK COUNT”列的结果。 |
例如,可以使用 SOS 调试扩展显示有关托管堆的信息、查找堆损坏情况、显示运行时所使用的内部数据类型以及查看有关在运行时内运行的所有托管代码的信息。
调试环境。
WDK 和开发人员工具网站获取)中并在 WinDbg.exe 中执行命令来使用此扩展。
若要将 SOS 调试扩展加载到 WinDbg.exe 调试器中,请在工具中运行以下命令:
.loadby sos clr
默认情况下,应使用与当前版本的 Mscorwks.dll 匹配的 SOS.dll 版本。
若要使用在其他计算机上创建的转储文件,请确保该安装所附带的 Mscorwks.dll 文件存在于符号路径中,并加载相应的 SOS.dll 版本。
若要加载特定版本的 SOS.dll,请在 Windows 调试器中键入以下命令:
.load <full path to sos.dll>
00ad28d0 处的数组内容。显示从第二个元素开始,连续显示五个元素。
!dumparray -start 2 -length 5 -detail 00ad28d0
1ca248 处的程序集的内容。
!dumpassembly 1ca248
下面的命令显示有关垃圾回收器堆的信息。
!dumpheap
下面的命令将内存中压力日志的内容写入到当前目录中名为 StressLog.txt 的(默认)文件中。
!DumpLog
MethodDesc 结构。
!dumpmd 902f40
1caa50 处的模块的信息。
!dumpmodule 1caa50
a79d40 处的对象的信息。
!DumpObj a79d40
00a79d9c 处的值类的字段。
!DumpVC 0090320c 00a79d9c
下面的命令显示垃圾回收器所使用的进程内存。
!eeheap -gc
下面的命令显示所有已做好终结计划的对象。
!finalizequeue
00a79d98 处的对象的应用程序域。
!findappdomain 00a79d98
下面的命令显示当前进程中的所有垃圾回收器句柄。
!gcinfo 5b68dbb8
EEClass 结构。
!name2ee unittest.exe MainClass.Main
02000003 处的元数据标记的信息。
!token2ee unittest.exe 02000003