2012-06-08 16 views
5

En primer lugar, ¿hay algún comando para obtener ayuda y parámetros para cada comando sos en windbg?¡Explique! SyncBlk el comando windbg

En segundo lugar, me gustaría entender !syncblk salida

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 muestra # de monitor de poder del synblk. 1 para escribir y 2 para leer, pero ¿qué significa el resto de la columna?

decir que tengo un código C#

MyClass MyObj; 
MyObj = new MyClass(); 

si hago lo

lock (MyObj) 
{ 
} 

Will la columna espectáculo syncblk propietario "MyClass"? De manera similar cuando ejecuto este comando !SyncBlk, ¿qué es exactamente lo que me muestra? ¿Me está mostrando el número de lock() y Monitor.Enter y Mutex() y otros mecanismos de bloqueo?

Respuesta

7

Para obtener ayuda para los comandos de SOS escriba !help o !sos.help. Para obtener ayuda sobre comandos específicos, escriba !help <command>. Los textos de ayuda para SOS también son available online. La versión en línea le brinda una descripción general del comando. Para detalles adicionales, use !help syncblk.

La salida !syncblk muestra la id. Del subproceso (encabezado n. ° 1 en el resultado a continuación), el objeto y el tipo de objeto utilizado para bloquear (encabezado n. ° 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) primer valor es objeto hilo, segundo es ID del tema nativo y última es WinDbg ID del tema.

2) El primer valor es el objeto utilizado para bloquear y el segundo valor es el tipo de este objeto.

!syncblk solo cubre las cerraduras .NET internas, por lo que Mutex (que es un objeto kernel) no se trata aquí.

En su ejemplo, se mostrará la id. De subproceso del código que ejecuta la instrucción de bloqueo junto con la dirección MyObj y el tipo MyClass.

+0

¿Puede decir qué columna muestra qué valor? hay 2 columnas de sincronización. – bsobaid

+0

He actualizado mi respuesta para aclarar. Por favor, avíseme si aún no está claro. –

+0

Gracias, y ¿qué significan las columnas 1,2 y 4? WinDbgId se utiliza para profundizar un hilo? algo así como ~ 45e! clrstack? ¿Hay alguna manera de saber la línea de código donde una línea de sincronización está reteniendo/esperando un hilo? – bsobaid