c# - 请解释!SyncBlk windbg命令

标签 c# command windbg sos

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

相关文章:

c# - Datagridview 单元格值变化更新数据库

c++ - 使用 Win7/64 分析在 XP/32 机器上生成的 Windows 崩溃转储?

powershell - Powershell 中线程的详细信息

c# - Linq 按不同值搜索

c# - 光线追踪出了问题

c# - 查找具有未观察到异常的任务的最佳策略

windows - 有什么方法可以重定向在 Windows 命令行中使用 "start"运行的命令的 stderr 输出?

windows - 使用Windows批处理文件将具有相同文件名的不同文件夹中的多个文件复制到一个公共(public)文件夹中

linux - 将 bash 脚本的命令添加到终端

debugging - 如何在 x64 堆栈中找到 native 异常?