首先,在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
显示synblk
拥有的监视器数量。 1表示写入,2表示读取,但是该列的其余部分是什么意思?说我有一个C#代码
MyClass MyObj;
MyObj = new MyClass();
现在,如果我愿意
lock (MyObj)
{
}
syncblk
所有者列会显示“MyClass”吗?同样,当我运行此
!SyncBlk
命令时,它到底向我显示了什么?是否显示lock()
和Monitor.Enter
和Mutex
()的数量以及其他锁定机制? 最佳答案
要获得有关SOS命令的帮助,请键入!help
或!sos.help
。要获得有关特定命令的帮助,请键入!help <command>
。 SOS的帮助文本也为available online。在线版本为您提供了该命令的概述。有关其他详细信息,请使用!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)第一个值是线程对象,第二个值是 native 线程ID,最后一个是WinDbg线程ID。
2)第一个值是用于锁定的对象,第二个值是此对象的类型。
!syncblk
仅覆盖内部的.NET锁,因此此处不涉及Mutex
(它是内核对象)。在您的示例中,运行lock语句的代码的线程ID将与指向的地址
MyObj
和类型MyClass
一起显示。关于c# - 请解释一下!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10951654/