首先,在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.EnterMutex()的数量以及其他锁定机制?

最佳答案

要获得有关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/

10-10 19:27