gpt4 book ai didi

c# - 请解释!SyncBlk windbg命令

转载 作者:太空狗 更新时间:2023-10-29 23:01:23 35 4
gpt4 key购买 nike

首先,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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com