Crear asociaciones con procesos en ejecución con el depurador de Visual Studio

En este tema se muestra cómo asociar código a un proceso en ejecución o a un proceso en un equipo remoto, y soluciona errores de asociación.

¿Por qué depurar los procesos asociados?

El depurador de Visual Studio tiene la capacidad de asociarse a un proceso que se está ejecutando fuera de Visual Studio.Puede utilizar esta posibilidad de asociación para realizar lo siguiente:

  • Depurar una aplicación no creada en Visual Studio.

  • Depurar varios procesos simultáneamente.También puede depurar múltiples procesos si inicia múltiples proyectos en una misma solución.

  • Depurar un proceso que se ejecuta en un equipo remoto.

  • Depurar una DLL que se ejecuta en un proceso independiente que no puede iniciarse fácilmente desde Visual Studio, por ejemplo un servicio o una DLL ISAPI que se ejecuta con Internet Information Services.

  • Iniciar automáticamente el depurador cuando un proceso se bloquee mientras se ejecuta fuera de Visual Studio.Esto es la depuración Just-In-Time.

Después de asociar un programa, puede usar los comandos de ejecución del depurador, inspeccionar el estado del programa, etc.Para obtener más información, vea Depurar uno o varios procesos en Visual Studio, Iniciar, interrumpir, recorrer paso por paso y ejecutar procesos a través del código y detener la depuración en Visual Studio y Ver datos en el depurador.La capacidad de inspeccionar el programa puede ser limitada, en función de si el programa se ha generado con información de depuración, de si el usuario tiene acceso al código fuente del programa o de si el compilador JIT de Common Language Runtime realiza un seguimiento de la información de depuración.

Nota para C++Nota para C++

Para que el depurador se asocie al código escrito en C++, el código debe emitir DebuggableAttribute.Puede agregar este atributo automáticamente al código vinculando con la opción /ASSEMBLYDEBUG del vinculador.

Nota de precauciónPrecaución

Para asociar a una aplicación de la Tienda Windows escrita en JavaScript, primero debe habilitar la depuración de la aplicación.Vea Attach the debugger en el Centro de desarrollo de Windows.

Adjuntar a un proceso en ejecución

  1. En el menú Depurar, seleccione Asociar al proceso.

  2. En el cuadro de diálogo Asociar al proceso, seleccione el programa que desea asociar en la lista Procesos disponibles.

    1. Si el programa que desea depurar se está ejecutando en otro equipo, use el cuadro de lista Calificador para seleccionar o especificar el equipo remoto.Para obtener más información, vea Depuración y diagnóstico remotos.

    2. Si el proceso se ejecuta con una cuenta de usuario diferente, active la casilla Mostrar los procesos de todos los usuarios.

    3. Si está conectado a través de Conexión a Escritorio remoto, active la casilla Mostrar los procesos de todas las sesiones.

  3. En el cuadro Asociar a, asegúrese de que aparece el tipo de código que desea depurar.El valor predeterminado Automático intenta determinar qué tipo de código desea depurar.Si el valor automático no es adecuado:

    1. Haga clic en Seleccionar.

    2. En el cuadro de diálogo Seleccionar tipo de código, haga clic en Depurar estos tipos de código y seleccione los tipos que va a depurar.

    3. Haga clic en Aceptar.

  4. Haga clic en Asociar.

    La lista Procesos disponibles aparecerá automáticamente al abrir el cuadro de diálogo Procesos.Los procesos se pueden iniciar y detener en segundo plano mientras el cuadro de diálogo está abierto.Sin embargo, el contenido no siempre estará actualizado.Es posible actualizar la lista en cualquier momento y ver los procesos en curso haciendo clic en Actualizar.

    Puede tener asociados varios programas mientras realiza la depuración, pero sólo un programa estará activo en el depurador en cada momento.Puede establecer el programa activo en la barra de herramientas Ubicación de depuración o en la ventana Procesos.

    [!NOTA]

    Para que el depurador se asocie a código administrado escrito en C++/CLI, el código debe emitir DebuggableAttribute.Puede agregar este atributo automáticamente al código vinculando con la opción /ASSEMBLYDEBUG del vinculador.

    Si intenta asociar a un proceso que pertenece a una cuenta de usuario que no es de confianza, aparecerá un cuadro de diálogo de confirmación con una advertencia de seguridad.Para obtener más información, vea Advertencia de seguridad: adjuntar a un proceso que pertenezca a una cuenta de usuario que no sea de confianza puede ser peligroso. Si la información siguiente le resulta sospechosa o no está seguro de su procedencia, no la adjunte a este proceso..

    En algunos casos, al depurar en una sesión de Escritorio remoto (Terminal Services), en la lista Procesos disponibles no aparecerán todos los procesos disponibles.En Windows Server 2003 o versiones posteriores, si se ejecuta Visual Studio como usuario que tiene una cuenta de usuario limitada, la lista Procesos disponibles no mostrará los procesos que se estén ejecutando en la sesión 0, la cual se utiliza para los servicios y otros procesos de servidor, por ejemplo w3wp.exe.Para resolver el problema, ejecute Visual Studio con una cuenta de administrador o ejecute Visual Studio desde la consola de servidor en lugar de una sesión de Servicios de Terminal Server.Si ninguna de estas dos soluciones es posible, existe una tercera opción que consiste en asociar al proceso mediante la ejecución de vsjitdebugger.exe -pProcessId en la línea de comandos de Windows.Puede determinar el identificador de proceso mediante tlist.exe.Para obtener tlist.exe, descargue e instale las Herramientas de depuración para Windows, disponibles en https://go.microsoft.com/fwlink/?LinkId=168279.

Para detener la depuración del proceso asociado, haga clic en Depurar/Detener depuración o detenga la ejecución del proceso asociado.

Asociar a un proceso en un equipo remoto

En el cuadro de diálogo Asociar al proceso, puede seleccionar otro equipo configurado para la depuración remota.Para obtener más información, vea Configurar las herramientas remotas en el dispositivo.Cuando se ha seleccionado un equipo remoto, se puede consultar una lista con los procesos disponibles que se están ejecutando en dicho equipo y establecer una asociación con uno o varios procesos para llevar a cabo la depuración.

Para seleccionar un equipo remoto:

  1. En el cuadro Asociar al proceso, seleccione el tipo de conexión adecuado en la lista Transporte.Valor predeterminado es la configuración correcta en la mayoría de los casos.

  2. Utilice el cuadro de lista Calificador para elegir el nombre del equipo remoto mediante uno de los métodos siguientes:

    1. Escriba el nombre en el cuadro de lista Calificador.

    2. Haga clic en la flecha desplegable del cuadro de lista Calificador y seleccione el nombre del equipo en la lista desplegable.

    3. Haga clic en el botón Buscar situado junto a la lista Calificador para abrir el cuadro de diálogo Seleccionar conexión del depurador remoto.El cuadro Seleccionar conexión del depurador remoto muestra todos los dispositivos que se encuentran en su subred local, y cualquier dispositivo conectado directamente al equipo mediante un cable Ethernet.Haga clic en el equipo o el dispositivo que desee y, a continuación, haga clic en Seleccionar.

    La configuración de Transporte se conserva entre las sesiones de depuración.La configuración de Calificador sólo se conserva entre las sesiones de depuración si se produce una conexión de depuración correcta con ese calificador.

Solucionar problemas de errores de asociación

Cuando el depurador se asocia a un proceso en ejecución, el proceso puede contener uno o varios tipos de código.Los tipos de código a los que se puede asociar el depurador se muestran y seleccionan en el cuadro de diálogo Seleccionar tipo de código.

[!NOTA]

Para que el depurador se asocie a código administrado escrito en C++, el código debe emitir DebuggableAttribute.Puede agregar este atributo automáticamente al código vinculando con la opción /ASSEMBLYDEBUG del vinculador.

Nota de precauciónPrecaución

Para asociar a una aplicación de la Tienda Windows escrita en JavaScript, primero debe habilitar la depuración de la aplicación.Vea Attach the debugger en el Centro de desarrollo de Windows.

A veces, el depurador puede asociarse correctamente a un tipo de código, pero no a otro.Esto puede ocurrir cuando se intenta asociar el depurador a un proceso que está ejecutándose en un equipo remoto.Puede que el equipo remoto tenga instalados los componentes de depuración remota para algunos tipos de código, pero no para otros.También puede ocurrir al intentar asociar el depurador a dos o varios procesos para realizar una depuración directa de la base de datos.La depuración de SQL sólo admite la asociación a un único proceso.

Si el depurador logra asociarse a algunos tipos de código, pero no a todos, aparecerá un mensaje en el que se identifican los tipos sin asociar:

Si el depurador se asocia correctamente a un tipo de código por lo menos, podrá reanudar la depuración del proceso.Sólo podrá depurar los tipos de código que se hayan asociado correctamente.El mensaje de ejemplo anterior indica que el tipo de código de script no se ha asociado correctamente.Por lo tanto, no podrá depurar código de script dentro del proceso.El código de script del proceso seguirá ejecutándose, pero no se podrán establecer puntos de interrupción, ni se podrán ver los datos, ni se podrá realizar ninguna otra operación de depuración en el script.

Si desea obtener información más detallada sobre el motivo por el que el depurador no se ha asociado correctamente a un tipo de código, puede intentar asociarlo de nuevo con ese tipo de código exclusivamente.

Para obtener información específica sobre la causa por la que no se ha asociado correctamente un tipo de código

  1. Desasocie el proceso.En el menú Depurar, haga clic en Desasociar todo.

  2. Vuelva a asociar el proceso, pero seleccionando un único tipo de código.

    1. En el cuadro de diálogo Asociar al proceso, seleccione el proceso en la lista Procesos disponibles.

    2. Haga clic en Seleccionar.

    3. En el cuadro de diálogo Seleccionar tipo de código, seleccione Depurar estos tipos de código y el tipo de código que no se haya asociado correctamente.Borre cualquier otro código.

    4. Haga clic en Aceptar.El cuadro de diálogo Seleccionar tipo de código se cierra.

    5. En el cuadro de diálogo Asociar al proceso, haga clic en Asociar.

    Esta vez se producirá un error en todo el proceso de asociación y aparecerá un mensaje de error específico.

Vea también

Conceptos

Depurar uno o varios procesos en Visual Studio

Depuración Just-In-Time en Visual Studio

Otros recursos

Depuración y diagnóstico remotos