Quiero adjuntarme a un proceso (a.exe) tan pronto como se genera, ¿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.Visual Studio: adjuntar automáticamente a un proceso cuando se genera el proceso
Respuesta
Cuando me enfrenté a esta situación antes (y controlé ambos procesos), encontré una solución decente para llamar al 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.
solo funciona en lenguajes .NET. No para C++, por ejemplo – guilhermecgs
¿Qué tal esto: proyecto abierto para a.exe
en VS, defina los puntos de interrupción, etc. A continuación, abra las propiedades del proyecto para a.exe, depuración pestaña y establezca Comando a c.exe
. Luego solo presione Depurar.
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.
En mi situación, el ejecutable que quiero depurar se inicia como parte de la puesta en marcha de otro ejecutable. Supongo que esa es la fuerza impulsora detrás de la pregunta. –
funcionó para mí. Rápido y fácil para casos directos, pero posiblemente no sea bueno para los más complejos. – AbstractDissonance
Si el código C# que se puso en marcha por código no administrado a continuación, asegúrese de comprobar "depuración de código no administrado" @Project propiedades - Opciones> depuración ..
MSDN tiene [Cómo: Iniciar el depurador automáticamente] [1] - esto permitiría omitir la plétora de cuadros de diálogo de confirmación de clics de trabajo ocupado [sin apagar el UAC u otro desorden]. El artículo enumera los siguientes pasos:
- iniciar el Editor del Registro (regedit).
- En el Editor del registro, abra la carpeta HKEY_LOCAL_MACHINE.
- Navegue 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 busque la aplicación que desea depurar:
a. Haga clic con el botón secundario en la carpeta Opciones de ejecución de archivos de imagen, y en el menú contextual, haga clic en Nueva clave.
b. Haga clic con el botón derecho en la nueva clave y, en el menú contextual, haga clic en Cambie el nombre. c. Edite el nombre de la tecla al nombre de su aplicación; myapp.exe, en este ejemplo.- Haga clic con el botón secundario 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.
- Cambie 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. Aparecerá el cuadro de diálogo Editar cadena.
- En el Cuadro de datos de valor, tipo 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.
b. Haga clic en Configuración avanzada del sistema.
c. En Propiedades del sistema, haga clic en la ficha Advanced.
d. En la ficha Advanced, haga clic en Variables de entorno.
e. En el cuadro de diálogo Variables deMedio Ambiente, bajo variables del sistema, seleccione Ruta, a continuación, haga clic en el botón Editar .
f. En el cuadro de diálogo Editar variable de sistema, agregue el directorio al cuadro Variable value. Use un punto y coma para separarlo de otras entradas en la lista.
g. Haga clic en Aceptar para cerrar Editar variable de sistema cuadro de diálogo.
h. Haga clic en Aceptar para cerrar el cuadro de diálogo Variables de entorno . i. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del sistema .Ahora, utilice cualquier método para iniciar su aplicación. Visual Studio se iniciará y cargar la aplicación
[1]: http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx
Me gusta esta respuesta porque funciona si su código está construido en modo Release con PDB activado. El método anterior de Debugger.Launch() no funciona si está integrado en el modo de lanzamiento. – Pretzel
También puede utilizar gflags.exe util que viene con herramientas de depuración de Windows, todo lo que necesita hacer es gflags abiertas. exe luego ve al archivo de imagen ingresa el nombre del proceso (a.exe) presiona la pestaña y marca la casilla de depuración, en el cuadro de texto ingresa 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ático se abrirá onc e el proceso se está ejecutando, puede agregar sus puntos de interrupción y presionar Ejecutar.
"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. Construí Attach porque tengo este problema todo el tiempo!)
No funcionó para mí ... Pude ver los símbolos cargados pero luego el proceso continuaría ejecutándose y se cerraría. Tal vez sea porque estaba tratando de conectarme a un proceso que no tenía en la solución y, por lo tanto, no había un punto de interrupción. –
@NelsonRothermel: me gustaría ayudar, pero Stack Overflow no es el lugar adecuado para el soporte técnico de Entrian Solutions. :-) Envíeme un correo electrónico ([email protected]) si desea que intente ayudar con su problema. Hay algunas cosas fáciles de probar. – RichieHindle
Terminé haciendo que funcionara con gflags.exe y la clave para mí era romper con cierto tipo de excepción, así que creo que su solución realmente habría funcionado si lo hubiera configurado correctamente. No lo necesitaré ahora, pero es un complemento interesante que podría ser útil en el futuro. –
He estado buscando alguna forma de hacer esto cuando ejecuto una aplicación de consola dentro de una prueba de aceptación.
me encontré con esto hoy - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introducing-the-child-process-debugging-power-tool/
Es un complemento para Visual Studio, y funciona un convite. 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.
Esta es la forma más fácil de todas las soluciones que he probado aquí. Se instala fácilmente y solo funciona. No se requieren cambios de código. –
Otra buena solución es utilizar la extensión de Visual Studio "ReAttach". Se puede encontrar here.
Si su proceso no se está ejecutando actualmente, ReAttach le pedirá que lo inicie y lo conecte tan pronto como esté disponible.
Me gustó mucho Entrian Attach según lo sugerido por @RichieHindle, pero también encontré esta herramienta gratuita que hace algo similar. Captura todos los procesos iniciados por el proceso de depuración.
Spawned Proceso Catcher: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher
Este módulo no se instalará en VS 2013, 2015 o 2017. No se ha actualizado desde finales de 2013. –
A partir de VS 2013 SP2, hay una herramienta gratuita de Microsoft, que hace lo mismo que "Spawned Catcher Proceso" se mencionó antes - adjuntar todos los procesos que se inician mediante un proceso Ya en la depuración. Nota: Solo he probado esto con C++ no administrado (esto funciona a la perfección).
- 1. Adjuntar a un proceso secundario automáticamente en Visual Studio durante la depuración
- 2. ¿Qué significa adjuntar al proceso en Visual Studio 2010?
- 3. Puede gdb adjuntar automáticamente un proceso en un SIGSEGV
- 4. depurando un proceso creado con CreateProcess en Visual Studio
- 5. Adjuntar al proceso en 2012
- 6. Cómo adjuntar un depurador dinámicamente a un proceso específico
- 7. Adjuntar automáticamente depurador vs2005 a procesos secundarios
- 8. "Adjuntar al proceso" como un evento posterior a la construcción
- 9. En VS2008, ¿hay alguna forma de "adjuntar al proceso" automáticamente?
- 10. Genera automáticamente XSD a C# en Visual Studio IDE
- 11. Visual Studio no puede encontrar el proceso w3wp
- 12. Visual Studio tiene privilegios insuficientes para depurar este proceso. Para depurar este proceso, Visual Studio debe ejecutarse como administrador
- 13. No se puede adjuntar al proceso
- 14. ¿Cómo conectar Visual Studio a un proceso que aún no se ha iniciado?
- 15. ¿Genera automáticamente un archivo DLL .DEF en Visual Studio?
- 16. ¿Adjuntar automáticamente archivos XML al esquema XSD en Visual Studio?
- 17. Adjuntar a un proceso remoto para la depuración
- 18. Establecer el valor de "Título" que se muestra en el cuadro de diálogo "Adjuntar al proceso" de Visual Studio?
- 19. Automatizar "Adjuntar al proceso" en VS2005/2008
- 20. ¿Visual Studio ejecuta pruebas con un proceso menos privilegiado?
- 21. ¿Qué sucede cuando un proceso se bifurca?
- 22. ¿Cómo se genera un proceso secundario en Ruby?
- 23. desenganche un proceso de depurador de Visual Studio
- 24. No puedo adjuntar ventanas Proceso de servicio
- 25. Depuración w/Adjuntar al proceso Inicia servidor de desarrollo ASP.NET
- 26. Abra automáticamente Source Control Explorer cuando se inicia Visual Studio
- 27. GDB adjuntándose a un proceso donde se eliminó el ejecutable
- 28. Depuración de Silverlight; proceso de no adjuntar
- 29. visual studio: adjuntar depurador sin iniciar depuración web
- 30. Cómo adjuntar un depurador en la creación del proceso?
¿Nos puede dar más contexto? ¿Eres el propietario del proceso? ¿Es tu código? ¿Es ese proceso llamando a tu código? –
Sí, soy el propietario de todo el proceso. –