请解释一下!SyncBlk windbg命令
首先,是否有一个命令来获取windbg
每个sos命令的帮助和参数?
其次,我想了解!syncblk
输出
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 201 05b9493c 979 1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 2875 05b4c914 1 1 17b99e10 1af8 290 024862d8 MyClass 2945 05b4b66c 1 1 17d1a290 12c0 752 02482940 MyClass
MonitorHeld
显示MonitorHeld
保持的监视器synblk
。 写入1和读取2,但列的其余部分是什么意思?
说我有一个C#代码
MyClass MyObj; MyObj = new MyClass();
现在,如果我这样做
lock (MyObj) { }
syncblk
所有者列是否会显示“MyClass”? 同样当我运行这个!SyncBlk
命令时,它究竟是什么向我展示? 它是否显示了lock()
和Monitor.Enter
和Mutex
()以及其他锁定机制的数量?
要获得SOS命令的帮助,请键入!help
或!sos.help
。 要获得有关特定命令的帮助,请键入!help
。 SOS的帮助文本也可在线获取 。 在线版本为您提供了该命令的概述。 有关其他详细信息,请使用!help syncblk
。
!syncblk
的输出显示了线程id(下面输出中的头#1),对象和用于锁定的对象的类型(头#2)。
+-------#1-------+ +-----#2------+ Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 201 05b9493c 979 1 05bc1040 bcc 45 022f3490 System.Collections.ArrayList 2875 05b4c914 1 1 17b99e10 1af8 290 024862d8 MyClass 2945 05b4b66c 1 1 17d1a290 12c0 752 02482940 MyClass
1)第一个值是线程对象,第二个是本机线程id,最后一个是WinDbg线程id。
2)第一个值是用于锁定的对象,第二个值是该对象的类型。
!syncblk
仅涵盖内部.NET锁,因此此处不涉及Mutex
(这是一个内核对象)。
在您的示例中,运行lock语句的代码的线程ID将与MyObj
指向的地址和MyClass
类型一起显示。