2010-11-09 18 views
7

Estoy intentando depurar de forma remota un programa C#. Conectarse al host no es un problema y puedo ver todos los procesos en ejecución en esa máquina, y puedo conectarme al msvsmon.exe.Depuración de un ejecutable C# que se bloquea al iniciar

Sin embargo, el programa que deseo depurar se bloquea inmediatamente en el inicio, por lo que no tengo tiempo para conectarme. También ejecutar el archivo ejecutable de depuración en cuestión a través de una ubicación remota no hace nada. ¿Cómo puedo adjuntar un depurador antes del bloqueo?

Respuesta

10

El bloqueo en el inicio puede deberse a una dependencia faltante. Ejecute fuslogvw.exe antes de iniciar su aplicación y verifique si alguna de las operaciones de enlace falla.

Si eso no ayuda, generalmente es una buena práctica tener un registro de diagnóstico en su lugar. Puede usar una biblioteca de registro dedicada, p. log4net, o al menos debería usar la forma más simple de registro a través del System.Diagnostics.Trace. Puede escuchar los mensajes de seguimiento configurando un detector de rastreo en la aplicación.config o utilizando herramientas de terceros como un depurador o DebugView de Sysinternals.

Si realmente desea adjuntar un depurador puede insertar un punto de interrupción mediante programación:

System.Diagnostics.Debugger.Break(); 

No he comprobado cómo funciona esto con un depurador remoto, pero como último recurso, usted puede tener su sueño de aplicaciones el tiempo suficiente para que pueda adjuntar un depurador:

System.Threading.Thread.Sleep(30000); 
+0

+1 DebugView es una de mis herramientas favoritas. – kenny

0

Finalmente después de mucho excavar alrededor me di cuenta de WPF fue la causa del problema. El blog de Rudsen revela answer.

En el registro de la aplicación sería el siguiente error;

.NET Runtime 4.0 Informe de errores

EventType clr20r3, P1 eobfrontend.exe, P2 1.0.0.0, P3 4cd95cc7, PresentationFramework P4, P5 4.0.0.0, P6 4ba1f8db, P7 78ff, P8 0, el sistema de P9. windows.markup.xamlparse, P10 NIL.

Realizado como Rudsen comentó "que el error significa que hubo un error de tiempo de ejecución al analizar el código xaml". Sigo los pasos descritos "Abrir depuración> Excepciones y active la casilla de verificación en la columna" lanzada "para" Excepciones de Common Language Runtime ". Hecho esto, Visual Studio detendrá todas las excepciones."

13

Uno de mis trucos favoritos para adjuntar un depurador al iniciar el programa es usando Image File Execution Options. Es una instalación de registro que le permite, entre otras cosas, adjuntar un depurador a una aplicación antes de su ejecución. El mismo truco permite, por ejemplo, reemplazar su Administrador de tareas de Windows con Process Explorer, o Notepad.exe con Notepad2.

Puedes leer todo al respecto here.

Así es como lo creó:

  • Run regedit.exe
  • Ir a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  • Crear una nueva clave llamada como su exe (ejemplo: yourprogram.exe)
  • Crear un nuevo valor de cadena debajo de su exe. El nombre del valor de cadena es Debugger, y el valor es vsjitdebugger.exe

Cuando se ejecuta el ejecutable, verá el Justo En el mensaje de tiempo que le solicitará que seleccione un depurador:

vsjitdebugger

Mientras este cuadro de diálogo esté abierto, conéctelo de forma remota a su proceso y presione No en el cuadro de diálogo.

Espero que ayude.

+1

Crickey, esto es bastante útil. No me di cuenta de que esto podría hacerse. – wonea

+1

GFlags es una herramienta gratuita de Microsoft que establecerá esta opción en el registro para usted, así como muchas otras opciones útiles de depuración. Está disponible de forma gratuita en http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx. Vale la pena usarlo cuando necesita configurar un depurador para que se ejecute cada vez que un programa o servicio se ejecuta en un sistema. – StarPilot

Cuestiones relacionadas