Depuración de un servicio en la nube de Azure en Visual Studio

Visual Studio proporciona distintas opciones para la depuración de Azure Cloud Services y máquinas virtuales.

Requisitos previos

Depuración del servicio en la nube en el equipo local

Puede ahorrar tiempo y dinero si utiliza el emulador de proceso de Azure para depurar su servicio en la nube en un equipo local. La depuración de un servicio localmente antes de su implementación puede mejorar la fiabilidad y el rendimiento sin pagar por tiempo de proceso. No obstante, pueden producirse algunos errores solo al ejecutar un servicio en la nube en el propio Azure. Puede depurar estos errores si habilita la depuración remota al publicar el servicio y luego adjuntar el depurador a una instancia de rol.

El emulador simula el servicio Azure Compute y se ejecuta en el entorno local para que pueda probar y depurar el servicio en la nube antes de implementarlo. El emulador administra el ciclo de vida de sus instancias de rol y proporciona acceso a recursos simulados, tales como el almacenamiento local. Al depurar o ejecutar el servicio desde Visual Studio, este entorno inicia automáticamente el emulador como una aplicación en segundo plano y después implementa el servicio en el emulador. Puede utilizar el emulador para ver su servicio cuando se ejecuta en el entorno local. Puede ejecutar la versión completa o la versión Express del emulador. Consulte Using Emulator Express to Run and Debug a Cloud Service Locally (Uso del emulador rápido para ejecutar y depurar localmente un servicio en la nube).

Para depurar el servicio en la nube en el equipo local

  1. En la barra de menús, seleccione Depurar>Iniciar depuración para ejecutar el proyecto de servicio en la nube de Azure. Como alternativa, puede presionar F5. Verá un mensaje que indica que el emulador de proceso se está iniciando. Cuando se inicia el emulador, el icono de bandeja del sistema lo confirma.

    Emulador de Azure en la bandeja del sistema

  2. Visualice la interfaz de usuario del emulador de proceso; para ello, abra el menú contextual del icono de Azure en el área de notificación y haga clic en Show Compute Emulator UI(Mostrar la UI del emulador de proceso).

    El panel izquierdo de la interfaz de usuario muestra los servicios implementados actualmente en el emulador de proceso y las instancias de rol que cada servicio ejecuta. Puede elegir el servicio o los roles para mostrar información sobre el ciclo de vida, el registro y el diagnóstico en el panel derecho. Si coloca el foco en el margen superior de una ventana incluida, se expande para rellenar el recuadro derecho.

  3. Recorra la aplicación, para lo que debe seleccionar los comandos del menú Depurar y establecer puntos de interrupción en el código. A medida que recorre la aplicación en el depurador, los paneles se actualizan con el estado actual de la aplicación. Cuando se detiene la depuración, se elimina la implementación de aplicaciones. Si la aplicación incluye un rol web y ha establecido la propiedad acción de inicio para iniciar el explorador web, Visual Studio inicia la aplicación web en el explorador. Si cambia el número de instancias de un rol en la configuración del servicio, debe detener el servicio en la nube y, luego, reinicie la depuración para que pueda depurar estas nuevas instancias del rol.

    Nota:

    cuando se deja de ejecutar o depurar el servicio, el emulador de proceso y el emulador de almacenamiento locales no se detienen. Debe detenerlos explícitamente en el área de notificación.

Depuración de un servicio en la nube en Azure

Los procedimientos de depuración dependen de si se usa Cloud Services (soporte extendido) o el modelo clásico de servicios en la nube. Si va a usar Cloud Services (soporte extendido), continúe leyendo. Si va a usar el modelo clásico, consulte Depuración de un servicio en la nube en Azure (modelo clásico).

Si habilita la depuración remota en un servicio en la nube mediante el procedimiento que se indica en esta sección, este no mostrará un rendimiento inferior ni incurrirá en cargos adicionales. No use la depuración remota en un servicio de producción, porque podría perjudicar a los clientes que usan el servicio.

Nota:

Al publicar un servicio en la nube en Visual Studio, puede habilitar IntelliTrace para los roles de ese servicio cuyo destino sea .NET Framework 4 o .NET Framework 4.x. Con IntelliTrace, puede examinar eventos que se produjeron en una instancia de rol en el pasado y reproducir el contexto a partir de ese momento. Consulte Depuración con IntelliTrace y Visual Studio de un servicio en la nube publicado y Uso de IntelliTrace.

Para habilitar la depuración remota en un servicio en la nube (soporte extendido)

  1. Agregue un punto de conexión al archivo ServiceDefinition.csdef para el puerto msvsmon predeterminado. En el caso de Visual Studio 2019, es 4024.

    <Endpoints>
       <InputEndpoint name="RemoteDebug" protocol="tcp" port="4024" localPort="4024" />
    </Endpoints>
    

    Nota:

    Otras versiones de Visual Studio tienen diferentes puertos Asignaciones de puerto del depurador remoto.

  2. Abra el menú contextual del proyecto de Azure y seleccione Publicar.

  3. Seleccione el entorno de ensayo y la configuración de depuración.

    Esto es solo de referencia. Puede optar por ejecutar sus entornos de prueba en un entorno de producción. No obstante, puede perjudicar a los usuarios si habilita la depuración remota en el entorno de producción. Puede seleccionar la configuración Liberar, pero la configuración Depurar simplifica la depuración.

    Elegir la configuración Depurar.

  4. Siga los pasos habituales descritos en Cloud Services (soporte extendido), pero active la casilla Habilitar Escritorio remoto para todos los roles.

    Se le pedirá que cree un nombre de usuario y una contraseña para el usuario de Escritorio remoto, ya que los necesitará más adelante para iniciar sesión en esa máquina virtual.

  5. Pase a la siguiente pantalla, examine la configuración y, cuando esté lista, haga clic en Publicar y espere hasta que finalice la implementación.

  6. Inicie sesión en Azure Portal y vaya al servicio en la nube (soporte extendido) que desea depurar.

  7. Elija Roles e instancias en el panel izquierdo y, después, elija el rol que desea depurar de forma remota.

  8. Haga clic en Conectar en el menú emergente Instancia de rol de la derecha y elija el botón Conectar para descargar un archivo de Escritorio remoto que le permitirá iniciar sesión en la máquina virtual. Inicie sesión con las credenciales que creó al habilitar el Escritorio remoto en un paso anterior.

    Captura de pantalla que muestra el elemento emergente de la instancia de rol con la opción Conectar.

  9. En la máquina virtual remota de Azure, instale las herramientas remotas de Visual Studio 2019 como se describe en Depuración remota.

  10. En el escritorio de la máquina virtual, ejecute el comando D:\Archivos de programa (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Remote Debugger\x64\msvsmon.exe. Asegúrese de ejecutarlo como administrador.

  11. Acepte mensajes para permitir el acceso a través del firewall. Debería ver un mensaje que indica que msvsmon.exe ha empezado a escuchar las conexiones.

  12. En el portal Azure, abra el grupo de recursos y obtenga la dirección IP pública para el servicio en la nube (soporte ampliado).

    Captura de pantalla que muestra dónde encontrar la dirección IP pública para el servicio en la nube.

Para asociar el depurador a un servicio en la nube (soporte extendido) en Azure

Nota:

Siempre que sea posible, debe realizar la depuración con la configuración Depurar elegida en el proceso de Publicar, pero si va a depurar una configuración de Liberar, en Visual Studio, use Ctrl+Q para buscar "Solo mi código" y desactive Habilitar solo mi código en Herramientas>Options>Depurador>General. Las versiones de lanzamiento están optimizadas y, por consiguiente, no se consideran "My code".

  1. Elija Depurar>Asociar al proceso (o presione Ctrl+Alt+P).

  2. Mantenga el tipo de conexión en Predeterminado.

  3. Escriba el destino de la conexión, para lo que debe usar la dirección IP y el puerto: {ipaddress}:4024.

  4. En Adjuntar a, seleccione Automático.

  5. Inicie sesión con las mismas credenciales que el usuario de Escritorio remoto.

  6. Seleccione Mostrar proceso para todos los usuarios. Si va a depurar un rol de trabajo, adjunte a WaWorkerHost.exe; si está depurando un rol web, adjunte al proceso de w3wp.exe; para un rol de API web, es WaIISHost.exe.

  7. Establezca puntos de interrupción (vaya a la línea y presione F9), acceda a la dirección URL pública del sitio y reproduzca el escenario para la depuración.

Para habilitar la depuración remota en un servicio en la nube (soporte extendido)

  1. Agregue un punto de conexión al archivo ServiceDefinition.csdef para el puerto msvsmon predeterminado. En el caso de Visual Studio 2022, es 4026, mientras que en Visual Studio 2019 es 4024.

    <Endpoints>
       <InputEndpoint name="RemoteDebug" protocol="tcp" port="4026" localPort="4026" />
    </Endpoints>
    

    Nota:

    Otras versiones de Visual Studio tienen diferentes puertos Asignaciones de puerto del depurador remoto.

  2. Si tiene como destino .NET 4.8, asegúrese de abrir el archivo ServiceConfiguration.Cloud.cscfg y comprobar el valor del atributo osFamily en el elemento ServiceConfiguration al publicar Cloud Services (soporte extendido). En el caso de un proyecto de .NET 4.8, use osFamily="7".

  3. Abra el menú contextual del proyecto de Azure y seleccione Publicar.

  4. Seleccione el entorno de ensayo y la configuración de depuración.

    Esto es solo de referencia. Puede optar por ejecutar sus entornos de prueba en un entorno de producción. No obstante, puede perjudicar a los usuarios si habilita la depuración remota en el entorno de producción. Puede seleccionar la configuración Liberar, pero la configuración Depurar simplifica la depuración.

    Elegir la configuración Depurar

  5. Siga los pasos habituales descritos en Cloud Services (soporte extendido), pero active la casilla Habilitar Escritorio remoto para todos los roles.

    Se le pedirá que cree un nombre de usuario y una contraseña para el usuario de Escritorio remoto, ya que los necesitará más adelante para iniciar sesión en esa máquina virtual.

  6. Pase a la siguiente pantalla, examine la configuración y, cuando esté lista, haga clic en Publicar y espere hasta que finalice la implementación.

  7. Inicie sesión en Azure Portal y vaya al servicio en la nube (soporte extendido) que desea depurar.

  8. Elija Roles e instancias en el panel izquierdo y, después, elija el rol que desea depurar de forma remota.

  9. Haga clic en Conectar en el menú emergente Instancia de rol de la derecha y elija el botón Conectar para descargar un archivo de Escritorio remoto que le permitirá iniciar sesión en la máquina virtual. Inicie sesión con las credenciales que creó al habilitar el Escritorio remoto en un paso anterior.

    Captura de pantalla que muestra el elemento emergente de la instancia de rol con la opción Conectar.

  10. En la máquina virtual remota de Azure, instale las herramientas remotas de Visual Studio 2022 como se describe en Depuración remota.

  11. En el escritorio de la máquina virtual, ejecute el comando D:\Archivos de programa\Microsoft Visual Studio 17.0\Common7\IDE\Remote Debugger\x64\msvsmon.exe. Asegúrese de ejecutarlo como administrador.

  12. Acepte mensajes para permitir el acceso a través del firewall. Debería ver un mensaje que indica que msvsmon.exe ha empezado a escuchar las conexiones.

    Captura de pantalla que muestra que msvsmon.exe está escuchando las conexiones.

  13. En el portal Azure, abra el grupo de recursos y obtenga la dirección IP pública para el servicio en la nube (soporte ampliado).

    Captura de pantalla que muestra dónde encontrar la dirección IP pública para el servicio en la nube.

Para asociar el depurador a un servicio en la nube (soporte extendido) en Azure

Nota:

Siempre que sea posible, debe realizar la depuración con la configuración Depurar elegida en el proceso de Publicar, pero si va a depurar una configuración de Liberar, en Visual Studio, use Ctrl+Q para buscar "Solo mi código" y desactive Habilitar solo mi código en Herramientas>Options>Depurador>General. Las versiones de lanzamiento están optimizadas y, por consiguiente, no se consideran "My code".

  1. Elija Depurar>Asociar al proceso (o presione Ctrl+Alt+P).

  2. Mantenga el tipo de conexión en Predeterminado.

  3. Escriba el destino de la conexión, para lo que debe usar la dirección IP y el puerto: {ipaddress}:4026.

  4. En Adjuntar a, seleccione Automático.

  5. Inicie sesión con las mismas credenciales que el usuario de Escritorio remoto.

  6. Seleccione Mostrar proceso para todos los usuarios. Si va a depurar un rol de trabajo, adjunte a WaWorkerHost.exe; si está depurando un rol web, adjunte al proceso de w3wp.exe; para un rol de API web, es WaIISHost.exe.

  7. Establezca puntos de interrupción (vaya a la línea y presione F9), acceda a la dirección URL pública del sitio y reproduzca el escenario para la depuración.

Depuración de un servicio en la nube en Azure (modelo clásico)

Para depurar un servicio en la nube desde una máquina remota, debe habilitar esa funcionalidad de forma explícita al implementar el servicio en la nube, con el fin de que los servicios requeridos (como msvsmon.exe) se instalen en las máquinas virtuales que ejecutan las instancias del rol. Si no habilitó la depuración remota al publicar el servicio, deberá volver a publicar el servicio con la depuración remota habilitada.

Si habilita la depuración remota para un servicio en la nube, este no mostrará un rendimiento inferior ni incurrirá en cargos adicionales. No use la depuración remota en un servicio de producción, porque podría perjudicar a los clientes que usan el servicio.

Nota:

Al publicar un servicio en la nube en Visual Studio, puede habilitar IntelliTrace para los roles de ese servicio cuyo destino sea .NET Framework 4 o .NET Framework 4.5. Con IntelliTrace, puede examinar eventos que se produjeron en una instancia de rol en el pasado y reproducir el contexto a partir de ese momento. Consulte Depuración con IntelliTrace y Visual Studio de un servicio en la nube publicado y Uso de IntelliTrace.

Para habilitar la depuración remota para un servicio en la nube (modelo clásico)

  1. Abra el menú contextual del proyecto de Azure y seleccione Publicar.

  2. Seleccione el entorno de ensayo y la configuración de depuración.

    Esto es solo de referencia. Puede optar por ejecutar sus entornos de prueba en un entorno de producción. No obstante, puede perjudicar a los usuarios si habilita la depuración remota en el entorno de producción. Puede seleccionar la configuración Liberar, pero la configuración Depurar simplifica la depuración.

    Elegir la configuración Depurar

  3. Siga los pasos habituales pero active la casilla Habilitar depurador remoto para todos los roles de la pestaña Configuración avanzada.

    Configuración de la depuración

Para asociar el depurador a un servicio en la nube en Azure (modelo clásico)

  1. En el Explorador de servidores, expanda el nodo del servicio en la nube.

  2. Abra el menú contextual del rol o la instancia de rol a los que quiera asociarlo y luego seleccione Asociar depurador.

    Si depura un rol, el depurador de Visual Studio se asociará a cada instancia de dicho rol. El depurador se interrumpirá en un punto de interrupción para la primera instancia de rol que ejecute esta línea de código y cumpla las condiciones de dicho punto de interrupción. Si depura una instancia, el depurador solo se asociará a dicha instancia y se interrumpirá en un punto de interrupción solamente cuando esa instancia específica ejecute esa línea de código y cumpla las condiciones del punto de interrupción.

    Asociar depurador

  3. Después de que el depurador se asocie a una instancia, realice la depuración de la forma habitual. El depurador se asocia automáticamente al proceso de host adecuado del rol. En función del tipo de rol, el depurador se asocia a w3wp.exe, WaWorkerHost.exe o WaIISHost.exe. Para comprobar el proceso al que se ha asociado el depurador, expanda el nodo de la instancia en el Explorador de servidores. Consulte Arquitectura de roles de Azure para más información sobre los procesos de Azure.

    Cuadro de diálogo Seleccionar tipo de código

  4. Para identificar los procesos al que está asociado el depurador, en la barra de menús, seleccione Depurar>Windows>Procesos y abra el cuadro de diálogo Procesos. (Teclado: Ctrl + Alt + Z) Para desasociar un proceso específico, abra su menú contextual y, a continuación, seleccione Desasociar proceso. También puede localizar el nodo de la instancia en el Explorador de servidores, buscar el proceso, abrir su menú contextual y seleccione Desasociar proceso.

    Depurar procesos

Advertencia

Evite detenciones prolongadas en los puntos de interrupción durante la depuración remota. Azure trata un proceso que se detiene durante algo más que unos minutos como si hubiese dejado de responder y detiene el envío de tráfico a dicha instancia. Si efectúa una detención demasiado prolongada, msvsmon.exe se separará del proceso.

Para separar el depurador de todos los procesos de su instancia o rol, abra el menú contextual del rol o la instancia que está depurando y seleccione Desasociar depurador.

Limitaciones de la depuración remota en Azure

La depuración remota presenta las siguientes limitaciones:

  • Con la depuración remota habilitada, no puede publicar un servicio en la nube que presente algún rol con más de 25 instancias.

  • El depurador usa los puertos de 30400 a 30424, de 31400 a 31424 y de 32400 a 32424. Si intenta usar alguno de estos puertos, no podrá publicar su servicio y aparecerá uno de los siguientes mensajes de error en el registro de actividad de Azure:

    • Error al validar el archivo .cscfg con el archivo .csdef. El intervalo de puertos reservado 'range' para el extremo Microsoft.WindowsAzure.PlugIns.RemoteDebugger.Connector del rol 'role' se superpone con un intervalo o puerto ya definido.
    • Error en la asignación. Vuelva a intentarlo más tarde, intente reducir el tamaño de la VM o el número de instancias de rol, o intente implementar en una región distinta.

Depuración de Azure App Service

Para depurar programas que se ejecutan en Azure App Service, utilice el cuadro de diálogo Asociar al proceso en Visual Studio.

Nota:

Esto solo está disponible para Azure App Service a partir de la versión 17.1 de Visual Studio 2022.

Para depurar una instancia de Windows Azure App Service

  1. En Depurar, seleccione Asociar al proceso.

  2. Cambie Tipo de conexión a Microsoft Azure App Services y, después, seleccione Buscar.

  3. En el cuadro de diálogo que se abre, seleccione el nombre de la suscripción.

    Captura de pantalla del cuadro de diálogo Seleccionar Azure App Service, en el que se muestra una lista de los App Services que se pueden seleccionar.

    Nota:

    Es preciso que haya iniciado sesión en una cuenta Microsoft con acceso a la suscripción que contiene Azure App Service.

  4. Filtre la vista por grupo de recursos o tipo de recurso, o realice una búsqueda por nombre.

  5. Luego, seleccione la instancia de App Service que desea depurar y seleccione Aceptar.

    Esto permite la depuración remota en App Service y muestra una lista de los procesos disponibles a los que puede realizar la asociación.

    Captura de pantalla de la ventana Asociar al proceso, en la que se muestran los procesos que se ejecutan en el App Service seleccionado.

  6. Seleccione el proceso al que desea asociar y elija Asociar para iniciar la depuración.

Depuración de máquinas virtuales de Azure

Puede depurar programas que se ejecuten en máquinas virtuales de Azure usando el Explorador de servidores en Visual Studio. Si habilita la depuración remota en una máquina virtual de Azure, Azure instalará la extensión de depuración remota en la máquina virtual. A continuación, podrá asociarla a procesos en la máquina virtual y realizar la depuración como lo haría normalmente.

Nota:

Las máquinas virtuales creadas a través de la pila del Administrador de recursos de Azure se pueden depurar remotamente mediante Cloud Explorer en Visual Studio de 2019. Para obtener más información, consulte Administración de recursos de Azure con Cloud Explorer.

Para depurar una máquina virtual de Azure

  1. En el Explorador de servidores, expanda el nodo Máquinas virtuales y seleccione el nodo de la máquina virtual que desea depurar.

  2. Abra el menú contextual y seleccione Habilitar depuración. Cuando se le pida que confirme si quiere habilitar la depuración en la máquina virtual, seleccione .

    Azure instala la extensión de depuración remota en la máquina virtual para habilitar la depuración.

    Comando para habilitar la depuración en máquina virtual

    Registro de actividad de Azure

  3. Cuando la extensión de depuración remota finalice la instalación, abra el menú contextual de la máquina virtual y seleccione Asociar depurador...

    Azure obtiene una lista de los procesos en la máquina virtual y los muestra en el cuadro de diálogo Asociar al proceso.

    Comando Asociar depurador

  4. En el cuadro de diálogo Asociar al proceso, elija Seleccionar para limitar la lista de resultados de forma que solo se muestren los tipos de código que quiere depurar. Puede depurar código administrado de 32 o 64 bits, código nativo o ambos.

    Cuadro de diálogo Seleccionar tipo de código

  5. Seleccione los procesos que quiere depurar en la máquina virtual y después seleccione Asociar. Por ejemplo, puede seleccionar el proceso w3wp.exe si desea depurar una aplicación web en la máquina virtual. Consulte Depuración de uno o varios procesos en Visual Studio y Arquitectura de roles de Azure para más información.

Creación de un proyecto web y una máquina virtual para la depuración

Antes de publicar el proyecto de Azure, es posible que le resulte útil probarlo en un entorno contenido que sea compatible con los entornos de depuración y pruebas, y en el que pueda instalar programas de pruebas y supervisión. Una manera de ejecutar tales pruebas es depurar su aplicación de forma remota en una máquina virtual.

Los proyectos ASP.NET de Visual Studio ofrecen una opción para crear una práctica máquina virtual que se puede usar para probar aplicaciones. La máquina virtual incluye los puntos de conexión requeridos habitualmente, como PowerShell, Escritorio remoto y Web Deploy.

Para crear de un proyecto web y una máquina virtual para la depuración

  1. En Visual Studio, cree una nueva aplicación web ASP.NET.

  2. En el cuadro de diálogo Nuevo proyecto ASP.NET, en la sección Azure, seleccione Máquina virtual en el cuadro de lista desplegable. Deje la casilla Crear recursos remotos activada. Seleccione Aceptar para continuar.

    Aparece el cuadro de diálogo Crear máquina virtual en Azure.

    Cuadro de diálogo Crear nuevo proyecto ASP.NET

    Nota:

    se le pedirá que inicie sesión en la cuenta de Azure si todavía no lo ha hecho.

  3. Elija los distintos valores de configuración de la máquina virtual y después seleccione Aceptar. Consulte Máquinas virtuales para obtener más información.

    El nombre que escriba como nombre DNS será el nombre de la máquina virtual.

    Cuadro de diálogo Crear máquina virtual en Azure

    Azure crea la máquina virtual y, después, aprovisiona y configura los extremos, como Escritorio remoto y Web Deploy.

  4. Cuando la máquina virtual esté completamente configurada, seleccione el nodo de la máquina virtual en el Explorador de servidores.

  5. Abra el menú contextual y seleccione Habilitar depuración. Cuando se le pida que confirme si quiere habilitar la depuración en la máquina virtual, seleccione .

    Azure instala la extensión de depuración remota en la máquina virtual para habilitar la depuración.

    Comando para habilitar la depuración en máquina virtual

    Registro de actividad de Azure

  6. Publique su proyecto tal y como se describe en Implementación de un proyecto web utilizando publicación con un solo clic en Visual Studio. Dado que desea realizar la depuración en la máquina virtual, en la página Configuración del asistente de Publicación web, seleccione Depurar como la configuración. Esto garantiza la disponibilidad de los símbolos de código durante la depuración.

    Publicación de valores

  7. En File Publish Options, seleccione Remove additional files at destination si el proyecto ya se había implementado anteriormente.

  8. Después de publicar el proyecto, en el menú contextual de la máquina virtual en el Explorador de servidores, seleccione Asociar depurador...

    Azure obtiene una lista de los procesos en la máquina virtual y los muestra en el cuadro de diálogo Asociar al proceso.

    Comando Asociar depurador

  9. En el cuadro de diálogo Asociar al proceso, elija Seleccionar para limitar la lista de resultados de forma que solo se muestren los tipos de código que quiere depurar. Puede depurar código administrado de 32 o 64 bits, código nativo o ambos.

    Cuadro de diálogo Seleccionar tipo de código

  10. Seleccione los procesos que quiere depurar en la máquina virtual y después seleccione Asociar. Por ejemplo, puede seleccionar el proceso w3wp.exe si desea depurar una aplicación web en la máquina virtual. Consulte Depuración de uno o varios procesos en Visual Studio para obtener más información.