5

まず、各 sos コマンドのヘルプとパラメーターを取得するためのコマンドはありwindbgますか?

!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()andMonitor.EnterMutex() およびその他のロック機構の数を表示していますか?

4

1 に答える 1

7

SOS コマンドのヘルプを表示するには、!helpまたはを入力します!sos.help。特定のコマンドのヘルプを表示するには、 と入力します!help <command>。SOS のヘルプ テキストもオンラインで入手できます。オンライン バージョンでは、コマンドの概要を説明します。詳細については、 を使用してください!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) 最初の値はスレッド オブジェクト、2 番目はネイティブ スレッド ID、最後は WinDbg スレッド ID です。

2) 最初の値はロックに使用されるオブジェクトで、2 番目の値はこのオブジェクトのタイプです。

!syncblk内部 .NET ロックのみをカバーするため、Mutex(カーネル オブジェクトである) ここではカバーしません。

MyObjあなたの例では、lock ステートメントを実行しているコードのスレッド ID が、アドレスポイントと typeと共に表示されますMyClass

于 2012-06-08T15:59:57.797 に答える