2010-08-21 11 views
7

Cuando emití el comando clrstack, obtuve el siguiente resultado. Es la pila de llamada de un hilo de bloqueo que posee un interbloqueo y resulta en un interbloqueo. ¿Es ese su propósito exacto? Tiene otros propósitos (sin ningún parámetro). ¿Dónde puedo obtener más información?Depuración de un punto muerto con el comando clrstack de Windbg

!clrstack 
OS Thread Id: 0x1b2c (6956) 
ESP  EIP  
0012f370 7c90e514 [HelperMethodFrame: 0012f370] System.Threading.Thread.SleepInternal(Int32) 
0012f3c4 79299275 System.Threading.Thread.Sleep(Int32) 
0012f3c8 00e0030f testlock.LockTest.Test() 
0012f420 00e00146 testlock.Program.Main(System.String[]) 
0012f69c 79e71b4c [GCFrame: 0012f69c] 
+0

Como se responde a continuación, este comando simplemente se usa para mostrar la pila de llamadas administradas para el contexto del hilo actual. Entonces, si está depurando problemas de interbloqueo, debería intentar combinarlo con otros comandos. –

+0

Esto no parece un punto muerto para mí. La pila muestra una llamada a Sleep. Para un punto muerto, debe esperar ver una llamada de espera en la pila. –

Respuesta

15

How to: Debug Deadlocks Using Windbg?

WinDbg/SOS Cheat Sheet

CLRStack [-a] [-l] [-p] [-n] Proporciona un seguimiento de pila de código administrado solamente.

  • La opción -p muestra argumentos de la función administrada .

  • La opción -l muestra información sobre variables locales en un marco. La extensión de depuración SOS no puede recuperar los nombres locales , por lo que la salida para los nombres locales está en el formato =.

  • La opción -a (todos) es un atajo para -l y -pcombined.

  • La opción -n deshabilita la visualización de los nombres de los archivos de origen y los números de línea. Si el depurador tiene la opción SYMOPT_LOAD_LINES especificado, SOS buscar los símbolos para cada logrado marco y si tiene éxito se mostrará el nombre del archivo fuente correspondiente y número de línea. El parámetro -n (Sin números de línea) se puede especificar para deshabilitar este comportamiento.

La depuración de extensión SOS no marcos de transición pantalla en x64 y plataformas basadas en IA-64.

actualización: (Gracias a @Liran): Para ver las pilas de llamadas para todos los hilos en su aplicación, ejecute el siguiente comando:

~*e!clrstack 

(lo que significa básicamente "iterar todos los hilos, y ejecute el comando '! clrstack' en cada uno de ellos ").

+1

Gracias por la respuesta .. Mi aplicación tiene 2 hilos. Pero el comando! Clrstack muestra la pila de llamadas de solo un hilo. He revisado los documentos antes de publicar la pregunta .. – Maanu

+1

@Maanu, este comando se emite por subproceso. Para emitirlo para todos los hilos en su aplicación, necesitará usar el siguiente comando: '~ * e! Clrstack' (que básicamente significa," iterar sobre todos los hilos, y ejecutar el comando '! Clrstack' en cada uno de ellos "). – Liran

1

Tess ha publicado mucha información útil sobre windbg. Aquí hay uno post que podría ayudar.

20

Utilice sosex por Steve Johnson. Esto tiene un comando para detectar interbloqueos para usted.

descargar la extensión del enlace y la carga, por ejemplo

.load D:\sosex_32\sosex.dll 

A continuación, emita

salida
!dlk 

ejemplo (tomado del sitio de Steve)

0: 010>! dlk Interbloqueo detectado: el subproceso CLR 4 contiene el bloque de sincronización 00000000024c6970 OBJ: 000000007fff0f80 [System.String] STRVAL = SYNC1 espera de bloques de sincronización 00000000024c6928 OBJ: 000000007fff0fa8 [System.String] hilo strval = sincronismo2 CLR 5 sostiene bloque sincronización 00000000024c6928 OBJ: 000000007fff0fa8 [System.String] strval = sincronismo2 espera de bloques de sincronización 00000000024c6970 OBJ: 000000007fff0f80 [System.String] strval = SYNC1 CLR hilo 4 es espera en ConsoleTestApp.ConsoleTestApp.MonitorDeadlockThreadProc() + 0xa4 (IL) [C: \ dev \ ConsoleTestApp \ ConsoleTestApp.cs, línea 195] CLR hilo 5 es espera en ConsoleTestApp.ConsoleTestApp. MonitorDeadlockThreadProc() + 0xa4 (IL) [C: \ dev \ ConsoleTestApp \ ConsoleTestApp.cs, línea 195]

Vea también este link para un tutorial

Cuestiones relacionadas