c# - resolucion - visual studio adjuntar
Visual Studio: se conecta automáticamente a un proceso cuando el proceso se genera (10)
A partir de VS 2013 SP2, hay una herramienta gratuita de Microsoft, que hace lo mismo que "Spawned Process Catcher" mencionado anteriormente: adjunta todos los procesos, que se inician mediante un proceso que ya se está depurando. Nota: Solo he probado esto con C ++ no administrado (esto funciona a la perfección).
Quiero adjuntarme a un proceso (a.exe) tan pronto como se genere, ¿es factible con VS? Solo sé el nombre del proceso. En realidad, lo que quiero lograr es establecer un punto de interrupción en el código c #, pero el código pertenece a otro ejecutable que se ejecutará con la aplicación actual en ejecución (c.exe). El código está dentro del período de inicialización, por lo que me es imposible hacer la conexión manualmente.
Cuando me enfrenté a esta situación antes (y controlé ambos procesos), encontré una solución decente para poner una llamada a Debugger.Launch() en el punto de entrada del proceso de desove. VS luego mostrará un cuadro de diálogo y le permitirá conectarse al proceso.
He estado buscando alguna forma de hacerlo cuando ejecuto una aplicación de consola dentro de una prueba de aceptación.
Encontré esto hoy - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/
Es un complemento para el estudio visual, y funciona como un regalo. Cuando depuro una prueba de aceptación (uso el corrector de prueba de resharper) y coloco un punto de interrupción dentro de la aplicación que se inicia, ahora puedo depurar la aplicación en la misma instancia de Visual Studio.
Otra buena solución es usar la extensión de Visual Studio "ReAttach". Puede ser encontrado here .
Si su proceso no se está ejecutando actualmente, ReAttach le pedirá que lo inicie y se adjunte tan pronto como esté disponible.
Realmente me gustó Entrian Attach como lo sugirió @RichieHindle, pero también encontré esta herramienta gratuita que hace algo similar. Captura todos los procesos iniciados por el proceso de depuración.
Generador de procesos generado: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher
Si el código C # está siendo iniciado por un código no administrado, asegúrese de marcar "Depuración de código no administrado" @Project properties -> opciones de depuración.
También puede usar la utilidad gflags.exe que viene con las herramientas de depuración de Windows, todo lo que necesita hacer es abrir gflags.exe, luego ir al archivo de imagen, ingresar la pestaña de prensa del nombre del proceso (a.exe) y marcar la casilla de verificación del depurador, en el TextBox ingrese la ruta vs con la opción / debugexe (es decir, "C: / Archivos de programa (x86) / Microsoft Visual Studio 10.0 / Common7 / IDE / devenv.exe" / debugexe)
El estudio visual automáticamente se abrirá una vez que el proceso esté en ejecución, puede agregar sus puntos de interrupción y presionar Run.
Vea el artículo de MSDN, Cómo: Iniciar el depurador automáticamente : esto le permitiría a uno omitir la plétora de cuadros de diálogo de confirmación de clics de busywork [sin apagar el UAC u otro desorden]. El artículo 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
"Entrian Attach" es un complemento de Visual Studio que hace exactamente esto: le dice el nombre de su ejecutable y adjunta el depurador a medida que se inicia el proceso, independientemente de cómo se haya iniciado, antes de ejecutar cualquier código.
(Divulgación: soy el autor. Creé Attach porque tengo este problema todo el tiempo).
Qué tal esto: abra el proyecto para a.exe
en VS, establezca los puntos de interrupción, etc. Luego, abra Propiedades del proyecto para a.exe, pestaña Depuración y establezca Comando en c.exe
. Luego solo presione Debug .
Desafortunadamente, nunca hice esto con proyectos administrados, así que puedo estar fuera de lugar aquí. Sin embargo, así es como lo haría con proyectos no administrados (C ++). Creo que el depurador administrado también debería ser compatible.