- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先,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
(这是一个内核对象)这里不涉及。
在您的示例中,运行锁定语句的代码的线程 ID 将与地址 MyObj
一起显示指向和类型 MyClass
.
关于c# - 请解释!SyncBlk windbg命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10951654/
我的应用程序有一个故障转储,显示有一堆线程在等待 syncblk,而 syncblk 显示它没有拥有线程。这怎么可能?我正在尝试在测试应用程序中重现该症状,但我无法弄清楚产生该结果可能会发生什么...
首先,windbg中是否有获取每个sos命令的帮助和参数的命令? 其次,我想了解!syncblk输出 Index SyncBlock MonitorHeld Recursion Owning Thre
我正在寻找 SOS 的 !SyncBlk 命令生成的输出的描述。 特别是我在“MonitorHeld”列上找不到有用的解释。此列显示一系列故障转储中的高值。 例子: 0:000> !SyncBlk I
我是一名优秀的程序员,十分优秀!