2012-07-10 11 views
10

Estoy explorando un minivolcado de un proceso ASP.NET con WinDbg, usando SOS. Si enumero los subprocesos administrados veo una lista de aspecto normal de hilos:No se puede cambiar a hilo administrado en WinDbg

0:000> !threads 
ThreadCount: 8 
UnstartedThread: 0 
BackgroundThread: 8 
PendingThread: 0 
DeadThread: 0 
Hosted Runtime: no 
               PreEmptive            Lock 
     ID OSID  ThreadOBJ  State GC  GC Alloc Context     Domain   Count APT Exception 
XXXX 1 12bc 00000000001441f0 1808220 Disabled 0000000140b10fc8:0000000140b12f20 000000000017f6e0  0 Ukn (Threadpool Worker) 
XXXX 2 1334 0000000000152f90  b220 Enabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn (Finalizer) 
XXXX 3 138c 000000000017b100 80a220 Enabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn (Threadpool Completion Port) 
XXXX 4 81c 000000000017eb40  1220 Enabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn 
XXXX 5 5e4 00000000001bccd0 880a220 Enabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn (Threadpool Completion Port) 
XXXX 6 11e4 0000000004bee280 180b220 Disabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn (Threadpool Worker) 
XXXX 7 73c 0000000004c267e0 180b220 Disabled 0000000140b0f158:0000000140b10f20 000000000017f6e0  3 Ukn (Threadpool Worker) System.StackOverflowException (000000007fff0138) (nested exceptions) 
XXXX 8 21c 00000000001ad1c0 180b220 Enabled 0000000000000000:0000000000000000 0000000000121b90  0 Ukn (Threadpool Worker) 

Sin embargo, si trato de cambiar a enhebrar 7 (el que tiene la excepción), me sale esto:

0:000> ~7s 
     ^Illegal thread error in '~7s' 

Esto ocurre al intentar cambiar a cualquier subproceso administrado. No estoy seguro de dónde proceder desde aquí. Lo que realmente necesito hacer es ver el seguimiento de la pila de ese hilo administrado.

Respuesta

9

La salida de !threads muestra tres identificadores diferentes para subprocesos (ID de WinDbg, ID administrada y ID nativa). El que necesitas usar es el más a la izquierda. Como puede ver, todos los hilos en el volcado han sido marcados como XXXX, lo que significa que ya no están disponibles. Esto es normal, pero me parece extraño que todos los hilos estén marcados así. ¿Se tomó el volcado durante el cierre del proceso?

actualización basada en comentario

que sin duda debe ser capaz de obtener un volcado útil con adplus -crash, pero es evidente que todo lo que es un poco en mal estado aquí ya que se está terminando incluso el subproceso finalizador. Noté que uno de los hilos tiene una StackoverflowException, que es probablemente lo que buscas. Para conseguirlo, puedes crear depósitos en excepciones de primera oportunidad y ver si obtienes algo más útil de esa manera. Adplus tiene una bandera FullOnFirst para eso.

actualización adicional

bien, que es raro. Un par de otras cosas para probar.

  • asociar al proceso antes del accidente y dejar que g. Eso debería irrumpir en el depurador de excepciones. Si lo desea, puede configurar un evento para imprimir cualquier excepción a la consola. Use sxe -c "!pe; !clrstack; gn" clr.

  • Adplus solía ser un script vbs pero se reescribió como un ejecutable hace un tiempo. He visto algunos problemas menores con la nueva versión, pero nada como esto. Puede probar el script anterior que todavía está disponible como adplus_old.vbs.

  • Probar procdump de sysinternals. Admite el mismo tipo de opciones de volcado que Adplus (más algunas más).

+0

Sí, el volcado se tomó durante un bloqueo (al ejecutar 'ADPlus -crash'). ¿Esto significa que no puedo mirar esos hilos en absoluto? – andypaxo

+0

¡Gracias por tu clara explicación! Lo intenté de nuevo, usando '-fullonfirst', y se creó un volcado completo. Lamentablemente, el resultado fue el mismo, con todos los hilos no disponibles. También intenté obtener la excepción directamente del montón, pero el mensaje, el seguimiento de la pila, etc. fueron todos nulos. ¿Tiene alguna idea de por qué hay tan poca información disponible? – andypaxo

+0

@Brian, ¿no debería usarse 'gn' en tu comando sxe? –

Cuestiones relacionadas