2012-08-03 16 views
8

Tengo un sitio web que se ejecuta en un servidor remoto y quiero obtener información de una excepción que está ocurriendo. No puedo instalar VS o usar la depuración remota, y he estado tratando de usar varias versiones de WinDbg con poco éxito. En mis pruebas locales, puedo hacer que WinDbg rompa una excepción de C++, o una excepción de CLR que lancé, pero no puedo obtener mucha más información de la que dice "algo fue arrojado".¿Puedo obtener una stacktrace de una excepción CLR sin conectar el depurador VS?

¿Es WinDbg el camino a seguir, o hay otra forma, o estoy jodido por no tener un registro adecuado?

+0

Yo diría que necesita un mejor registro, sí – YePhIcK

+0

Configuraría [adplus] (http://blogs.msdn.com/b/ntdebugging/archive/2009/05/18/capturing-adplus-clr-crashes .aspx) temporalmente para crear un minivolcado cada vez que se lanza una excepción, luego observe el minivolcado con WinDbg. – vcsjones

Respuesta

14

Acople WinDbg al proceso, a continuación, introduzca los siguientes comandos:

.symfix 
sxe clr 
sxd av 
.loadby sos clr 
g 

La ejecución continuará (después de ir de comandos) y se romperá cada vez que se lanza una excepción CLR (o cualquier otra excepción no controlada). Cada vez que se rompe en la excepción CLR ves:

(xxxx.xxxx): CLR exception - code e0434352 (first chance) 

continuación, puede utilizar los comandos de SOS como !pe imprimir tipo de excepción, !ClrStack de volcado de pila, !dso para volcar los objetos gestionados en la pila, etc.

EDITAR: tuve errores tipográficos en los comandos sxe y sxd. Gracias a @MStodd por notar eso.

+0

¿Quiere decir que no tiene puntos delante de 'sxe' y 'sxd'? – MStodd

+0

@MStodd, buen punto! Gracias por notarlo. Actualicé la publicación con los comandos correctos. –

+1

Voy a probarlo en mi máquina desordenada más tarde, pero se ve bien. Parece que para .NET 2.0, necesito '.loadby sos mscorwks' en lugar de' .loadby sos clr'. Eso suena bien? – MStodd

Cuestiones relacionadas