visual-studio - visual studio code
¿Cómo adjunto Visual Studio a un proceso que aún no se ha iniciado? (7)
Tengo un programa .NET que no se puede ejecutar desde Visual Studio por alguna razón (archivo 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 corte 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 un poco de tiempo para adjuntar el proceso en Visual Studio ¡está fuera de cuestión!
En realidad puedes; no te apegas a él, lo comienzas. En las propiedades de su proyecto, en la pestaña Depuración, especifique la ruta del programa al que desea adjuntar en el cuadro de texto "Comando".
También puede ingresar cualquier argumento de línea de comando para el programa en el cuadro "Argumentos de comando":
Asegúrese de que "Adjuntar" esté configurado en "No".
Encontré esta respuesta cuando estaba buscando algo similar. En mi caso, no podía simplemente usar el ejecutable como el programa de inicio de mi proyecto porque tenía que iniciarse en un entorno muy específico que no podía reproducir fácilmente (namly: started from cygwin).
Eché un vistazo a la extensión Reattach como lo sugirió mrstrange y también la muy similar extensión Attach To Anything ... pero mi ejecutable parecía cerrarse demasiado rápido para que las extensiones lo notificaran y adjuntasen.
Lo que finalmente me ayudó fue esto: https://.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:
- Inicie el Editor del Registro (regedit).
- En el Editor del registro, abra la carpeta HKEY_LOCAL_MACHINE.
- Acceda a las opciones de ejecución del archivo HKEY_LOCAL_MACHINE / Software / Microsoft / Windows NT / currentversion / image.
- En la carpeta Opciones de ejecución de archivos de imagen , busque el nombre de la aplicación que desea depurar, como myapp.exe . Si no puede encontrar la aplicación que desea depurar:
a. Haga clic con el botón derecho en la carpeta Opciones de ejecución de archivos de imagen y, en el menú contextual, haga clic en Nueva clave .
segundo. Haga clic con el botón derecho en la nueva clave y, en el menú contextual, haga clic en Cambiar nombre . do. Edite el nombre de la tecla al nombre de su aplicación; myapp.exe , en este ejemplo. - Haga clic con el botón derecho en la carpeta myapp.exe y, en el menú contextual, haga clic en Nuevo valor de cadena .
- Haga clic con el botón derecho en el nuevo valor de cadena y, en el menú contextual, haga clic en Cambiar nombre.
- Cambia el nombre a depurador.
- Haga clic con el botón derecho en el nuevo valor de cadena y en el menú contextual, haga clic en Modificar . Aparece el cuadro de diálogo Editar cadena .
- En el cuadro Información del valor , escriba vsjitdebugger.exe .
- Haga clic en Aceptar .
- En el menú Registro , haga clic en Salir .
- El directorio que contiene vsjitdebugger.exe debe estar en la ruta del sistema. Para agregarlo a la ruta del sistema, siga estos pasos:
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 .
do. 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 , luego haga clic en el botón Editar .
F. En el cuadro de diálogo Editar variable de sistema , agregue el directorio al cuadro Valor de variable . Use un punto y coma para separarlo de otras entradas en la lista.
gramo. Haga clic en Aceptar para cerrar el cuadro de diálogo Editar variable de 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 . - Ahora, use cualquier método para comenzar su aplicación. Visual Studio se iniciará y cargará la aplicación
Espero que esto ayude a los demás en el futuro.
Estaba depurando un complemento C ++ en un proceso generado externamente que colapsó lanzando una excepción al inicio y esto funcionó perfectamente para mí:
Agregue la extensión de reconexión gratuita para Visual Studio . Pídale que se vuelva a conectar al nombre del proceso antes de que se lance. 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 conectará de inmediato, atrapando excepciones y alcanzando puntos de interrupción.
Puede mostrar un MessageBox, esto bloquearía la aplicación, luego puede conectar o volver a conectar el depurador al proceso y hacer clic en Aceptar para continuar:
MessageBox.Show("Attach process to debugger and click ok!");
puede agregarlo al constructor de Formulario (si usa winform), por lo que este se ejecutará antes que cualquier otra cosa, a excepción de la inicialización de componentes:
public MainForm()
{
InitializeComponent();
MessageBox.Show("Attach process to debugger and click ok!");
}
Cuando termine de depurar, comente esa línea.
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 más que el resultado de su proyecto.
Siga estos pasos si tiene Visual Studio 2017:
- Archivo> Abrir> Proyecto / Solución
- Elija su .exe
- Depurar> Iniciar depuración
Mucho más fácil que otras sugerencias: no tiene que meterse con las propiedades del proyecto, y no se necesitan extensiones.
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 tienes 20 segundos para adjuntar al proceso, lo cual se puede hacer rápidamente con ctrl + alt + p, luego busca el proceso y luego ingresa para adjuntarlo.
No fue una gran respuesta, pero funcionó para mí: -)