Tengo un programa .NET que no se puede ejecutar desde Visual Studio por algunas razones (archivo de Excel creado a partir de un proyecto de plantilla de Excel 2010) para el cual necesito depurar eventos de inicio.
Si quiero depurar eventos que vienen después de la inicialización del programa, no hay problema. Ejecuto el programa desde el explorador, adjunto el proceso a Visual Studio y agrego algunos puntos de interrupción en el código. Pero aquí, necesito poner puntos de interrupción en los eventos de inicio. Necesito poder adjuntar procesos a Visual Studio, no dependiendo de un PID, sino de un nombre de proceso específico o cualquier otra solución que funcione.
¡Por supuesto, agregar un Thread.Sleep(1000)
en mis eventos de inicio para darme algo de tiempo para adjuntar el proceso en Visual Studio está fuera de discusión!
fuente
Estaba depurando un complemento de C ++ en un proceso generado externamente que se bloqueó al lanzar una excepción al inicio y esto funcionó perfectamente para mí:
Agregue la extensión Reattach gratis para Visual Studio . Pídale que se vuelva a adjuntar al nombre del proceso antes de que se inicie. Aparecerá un cuadro de diálogo modal que dice que está esperando que se inicie el nombre del proceso.
Ahora inicie el proceso y el depurador de Visual Studio se adjuntará inmediatamente, detectando excepciones y alcanzando puntos de interrupción.
fuente
Siga estos pasos si tiene Visual Studio 2017-2019:
Mucho más fácil que otras sugerencias: no tiene que meterse con las propiedades del proyecto y no se necesitan extensiones.
fuente
Encontré esta respuesta cuando buscaba algo similar. En mi caso, no podía simplemente usar el ejecutable como el programa de inicio de mi proyecto porque necesitaba iniciarse en un entorno muy específico que no podía reproducir fácilmente (a saber: iniciado desde cygwin).
Eché un vistazo a la extensión Reattach como lo sugirió mrstrange y también a la extensión Attach To Anything muy similar ... pero mi ejecutable parecía cerrarse demasiado rápido para que las extensiones notificaran y adjuntaran.
Lo que finalmente me ayudó fue esto: https://stackoverflow.com/a/4042545/1560865 , que hace referencia al artículo de MSDN Cómo: Iniciar el depurador automáticamente , que a su vez enumera los siguientes pasos:
a. Haga clic con el botón derecho en la carpeta Opciones de ejecución de archivos de imagen y, en el menú de acceso directo, haga clic en Nueva clave .
segundo. Haga clic con el botón derecho en la nueva clave y, en el menú de acceso directo, haga clic en Cambiar nombre . C. Edite el nombre de la clave al nombre de su aplicación; myapp.exe , en este ejemplo.
debugger
.vsjitdebugger.exe
.a. Abra el Panel de control en la vista clásica y haga doble clic en Sistema .
segundo. Haga clic en Configuración avanzada del sistema .
C. En Propiedades del sistema , haga clic en la pestaña Avanzado .
re. En la pestaña Avanzado , haga clic en Variables de entorno .
mi. En el cuadro de diálogo Variables de entorno, en Variables del sistema , seleccione Ruta y , a continuación, haga clic en el botón Editar .
F. En Editar variable del sistemacuadro de diálogo, agregue el directorio al cuadro Valor de variable . Utilice un punto y coma para separarlo de otras entradas de la lista.
gramo. Haga clic en Aceptar para cerrar el cuadro de diálogo Editar variable del sistema .
h. Haga clic en Aceptar para cerrar el cuadro de diálogo Variables de entorno .
yo. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del sistema .
¡Espero que esto ayude a alguien más en el futuro!
fuente
Si no hay ningún proceso, Visual Studio no puede adjuntarlo .
Sin embargo, puede configurar el programa de inicio de su proyecto para que sea algo diferente a la salida de su proyecto.
fuente
Puede mostrar un cuadro de mensaje, esto bloquearía la aplicación, luego adjunte o vuelva a adjuntar el depurador al proceso y haga clic en Aceptar para continuar:
puede agregarlo al constructor de formularios (si usa winforms), por lo que esto se ejecutará antes que cualquier otra cosa, excepto para la inicialización de componentes:
Cuando termine su depuración, comente esa línea.
fuente
Puede iniciar el depurador desde su código a través de
Pero no elimine esta línea antes de enviar su solicitud. Tal vez quieras usar indicadores del compilador para estar seguro:
fuente
Una pequeña solución que podría adaptarse a muchas personas.
en la primera línea de código que ejecutará el exe, agregue este comando
System.Threading.Thread.Sleep (20000)
Eso hará que el exe duerma durante 20 segundos antes de que comience a procesar cualquier cosa. Luego, tiene 20 segundos para adjuntar al proceso, que se puede hacer rápidamente con ctrl + alt + p, luego busque el proceso, luego ingrese para adjuntar.
No es una gran respuesta, pero funcionó de maravilla para mí: -)
fuente