Compartir vía


Depuración de aplicaciones ASP.NET Core

Nota:

Esta no es la versión más reciente de este artículo. Para la versión actual, consulta la versión .NET 8 de este artículo.

Advertencia

Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulta la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulta la versión .NET 8 de este artículo.

Importante

Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.

Para la versión actual, consulte la versión .NET 8 de este artículo.

En este artículo se muestra cómo depurar aplicaciones Blazor, incluida la depuración de aplicaciones Blazor WebAssembly con las herramientas de desarrollo del explorador o un entorno de desarrollo integrado (IDE).

Las Blazor Web App se pueden depurar en Visual Studio o en Visual Studio Code.

Las aplicaciones Blazor WebAssembly se pueden depurar:

  • En Visual Studio o Visual Studio Code.
  • Mediante herramientas de desarrollo del explorador en exploradores basados en Chromium, incluidos Edge, Google Chrome, y Firefox.

Entre los escenarios disponibles para la depuración de Blazor WebAssembly se incluyen:

  • Establecimiento y eliminación de puntos de interrupción.
  • Ejecute la aplicación con compatibilidad de depuración en IDE.
  • Examine el código en un solo paso.
  • Reanude la ejecución de código con un método abreviado de teclado en IDE.
  • En la ventana Variables locales, observe los valores de las variables locales.
  • Vea la pila de llamadas, incluidas las cadenas de llamadas entre JavaScript y .NET.
  • Use un servidor de símbolos para la depuración, configurado por las preferencias de Visual Studio.

Entre los escenarios no admitidos se incluyen:

Las aplicaciones Blazor Server se pueden depurar en Visual Studio o en Visual Studio Code.

Las aplicaciones Blazor WebAssembly se pueden depurar:

  • En Visual Studio o Visual Studio Code.
  • Mediante herramientas de desarrollo del explorador en exploradores basados en Chromium, incluidos Edge y Chrome.

Entre los escenarios no admitidos para las aplicaciones Blazor WebAssembly se incluyen:

  • Establecimiento y eliminación de puntos de interrupción.
  • Ejecute la aplicación con compatibilidad de depuración en IDE.
  • Examine el código en un solo paso.
  • Reanude la ejecución de código con un método abreviado de teclado en IDE.
  • En la ventana Variables locales, observe los valores de las variables locales.
  • Vea la pila de llamadas, incluidas las cadenas de llamadas entre JavaScript y .NET.
  • Depure en escenarios no locales; por ejemplo, el Subsistema de Windows para Linux (WSL) o Visual Studio Codespaces.
  • Use un servidor de símbolos para la depuración.

Las aplicaciones Blazor Server se pueden depurar en Visual Studio o en Visual Studio Code.

Las aplicaciones Blazor WebAssembly se pueden depurar:

  • En Visual Studio o Visual Studio Code.
  • Mediante herramientas de desarrollo del explorador en exploradores basados en Chromium, incluidos Edge y Chrome.

Entre los escenarios no admitidos para las aplicaciones Blazor WebAssembly se incluyen:

  • Establecimiento y eliminación de puntos de interrupción.
  • Ejecute la aplicación con compatibilidad de depuración en IDE.
  • Examine el código en un solo paso.
  • Reanude la ejecución de código con un método abreviado de teclado en IDE.
  • En la ventana Variables locales, observe los valores de las variables locales.
  • Vea la pila de llamadas, incluidas las cadenas de llamadas entre JavaScript y .NET.
  • Alcanzar puntos de interrupción durante el inicio de la aplicación antes de que se ejecute el proxy de depuración. Esto incluye los puntos de interrupción del archivo Program y los de los OnInitialized{Async} métodos de ciclo de vida de los componentes que se cargan según la primera página solicitada por la aplicación.
  • Depure en escenarios no locales; por ejemplo, el Subsistema de Windows para Linux (WSL) o Visual Studio Codespaces.
  • Use un servidor de símbolos para la depuración.

Requisitos previos

En esta sección se explican los requisitos previos para la depuración.

Requisitos previos del usuario

La versión más reciente de los siguientes exploradores:

  • Google Chrome
  • Microsoft Edge
  • Firefox (solo para herramientas de desarrollo del explorador)

La depuración requiere la versión más reciente de los siguientes exploradores:

  • Google Chrome (predeterminado)
  • Microsoft Edge

Asegúrese de que los firewalls o servidores proxy no bloquean la comunicación con el proxy de depuración (proceso NodeJS). Para más información, vea la sección Configuración de firewall.

Nota:

Apple Safari en macOS no se admite actualmente.

Requisitos previos del IDE

Se requiere la versión más reciente de Visual Studio o Visual Studio Code.

Requisitos previos de Visual Studio Code

Visual Studio Code requiere el Kit de desarrollo de C# para Visual Studio Code (Cómo empezar con C# en VS Code). En Marketplace de extensiones de Visual Studio Code, filtre la lista de extensiones con "c# dev kit" para buscar la extensión:

Kit de desarrollo de C# en Marketplace de extensiones de Visual Studio Code

La instalación del Kit de desarrollo de C# instala automáticamente las siguientes extensiones adicionales:

Si encuentra advertencias o errores, puede abrir una incidencia (microsoft/vscode-dotnettools repositorio de GitHub) describiendo el problema.

Requisitos previos de configuración de aplicaciones

La guía de esta subsección se aplica a la depuración del lado cliente.

Abra el archivo Properties/launchSettings.json del proyecto de inicio. Confirme la presencia de la siguiente propiedad inspectUri en cada perfil de inicio del nodo profiles del archivo. Si la propiedad siguiente no está presente, agréguela a cada perfil:

"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"

La propiedad inspectUri:

  • Permite que el IDE detecte que la aplicación es una aplicación Blazor.
  • Indica a la infraestructura de depuración de scripts que se conecte al explorador a través del proxy de depuración de Blazor.

El marco de trabajo proporciona los valores de marcador de posición para el protocolo WebSocket (wsProtocol), el host (url.hostname), el puerto (url.port) y el identificador URI del inspector en el explorador iniciado (browserInspectUri).

Paquetes

Blazor Web App: Microsoft.AspNetCore.Components.WebAssembly.Server: hace referencia a un paquete interno (Microsoft.NETCore.BrowserDebugHost.Transport) para ensamblados que comparten el host de depuración del explorador.

Blazor Server: Microsoft.AspNetCore.Components.WebAssembly.Server: hace referencia a un paquete interno (Microsoft.NETCore.BrowserDebugHost.Transport) para ensamblados que comparten el host de depuración del explorador.

Blazor WebAssembly independiente: Microsoft.AspNetCore.Components.WebAssembly.DevServer: servidor de desarrollo para su uso al crear aplicaciones Blazor. Llama a UseWebAssemblyDebugging internamente a para agregar middleware para depurar aplicaciones Blazor WebAssembly dentro de las herramientas de desarrollo de Chromium.

Blazor WebAssembly hospedada:

Nota:

Para obtener instrucciones sobre cómo agregar paquetes a aplicaciones .NET, consulta los artículos de Instalación y administración de paquetes en Flujo de trabajo de consumo de paquetes (documentación de NuGet). Confirma las versiones correctas del paquete en NuGet.org.

Depuración de una Blazor Web App en un IDE

En el ejemplo de esta sección se supone que has creado una Blazor Web App con un modo de representación interactivo de Auto (Servidor y WebAssembly) y la ubicación de interactividad por componente.

  1. Abra la aplicación.
  2. Establezca un punto de interrupción en la línea currentCount++; del componente Counter (Pages/Counter.razor) del proyecto de cliente (.Client).
  3. Con el proyecto de servidor seleccionado en Explorador de soluciones, presione F5 para ejecutar la aplicación en el depurador.
  4. En el explorador, vaya a la página Counter en /counter. Espere unos segundos para que el proxy de depuración se cargue y ejecute. Seleccione el botón Haga clic en mí para alcanzar el punto de interrupción.
  5. En Visual Studio, revise el valor del campo currentCount en la ventana Variables locales.
  6. Presione F5 para continuar la ejecución.

Los puntos de interrupción también se pueden alcanzar en el proyecto de servidor en componentes del lado servidor representados de forma estática e interactiva.

  1. Detén el depurador.
  2. En la aplicación de servidor, abra el componente representado Weather estáticamente (Components/Pages/Weather.razor) y establezca un punto de interrupción en cualquier lugar del OnInitializedAsync método .
  3. Presione F5 para ejecutar la aplicación en el depurador.
  4. En el explorador, vaya a la página Weather en /weather. Espere unos segundos para que el proxy de depuración se cargue y ejecute. La ejecución de la aplicación se detiene en el punto de interrupción.
  5. Presione F5 para continuar la ejecución.

Los puntos de interrupción no se alcanzan durante el inicio de la aplicación antes de que se ejecute el proxy de depuración. Esto incluye los puntos de interrupción del archivo Program y los de los OnInitialized{Async} métodos de ciclo de vida de los componentes que se cargan según la primera página solicitada por la aplicación.

Depuración de una aplicación Blazor Server en un IDE

  1. Abra la aplicación.
  2. Establezca un punto de interrupción en la línea currentCount++; del componente Counter (Pages/Counter.razor).
  3. Presione F5 para ejecutar la aplicación en el depurador.
  4. En el explorador, vaya a la página Counter en /counter. Espere unos segundos para que el proxy de depuración se cargue y ejecute. Seleccione el botón Haga clic en mí para alcanzar el punto de interrupción.
  5. En Visual Studio, revise el valor del campo currentCount en la ventana Variables locales.
  6. Presione F5 para continuar la ejecución.

Los puntos de interrupción no se alcanzan durante el inicio de la aplicación antes de que se ejecute el proxy de depuración. Esto incluye los puntos de interrupción del archivo Program y los de los OnInitialized{Async} métodos de ciclo de vida de los componentes que se cargan según la primera página solicitada por la aplicación.

Depuración de una aplicación Blazor WebAssembly en un IDE

  1. Abra la aplicación.
  2. Establezca un punto de interrupción en la línea currentCount++; del componente Counter (Pages/Counter.razor).
  3. Presione F5 para ejecutar la aplicación en el depurador.
  4. En el explorador, vaya a la página Counter en /counter. Espere unos segundos para que el proxy de depuración se cargue y ejecute. Seleccione el botón Haga clic en mí para alcanzar el punto de interrupción.
  5. En Visual Studio, revise el valor del campo currentCount en la ventana Variables locales.
  6. Presione F5 para continuar la ejecución.

Los puntos de interrupción no se alcanzan durante el inicio de la aplicación antes de que se ejecute el proxy de depuración. Esto incluye los puntos de interrupción del archivo Program y los de los OnInitialized{Async} métodos de ciclo de vida de los componentes que se cargan según la primera página solicitada por la aplicación.

Depuración de una aplicación hospedada Blazor WebAssembly en un IDE

  1. Con el proyecto Server seleccionado en el Explorador de soluciones, presione F5 para ejecutar la aplicación en el depurador.

    Al realizar una depuración con un explorador basado en Chromium, como Google Chrome o Microsoft Edge, puede que se abra una nueva ventana del navegador con un perfil distinto para la sesión de depuración, en vez de abrir una pestaña en una ventana existente con el perfil del usuario. Si la depuración con el perfil del usuario es un requisito, adopte uno de estos enfoques:

  2. En el proyecto Client, establezca un punto de interrupción en la línea currentCount++; del componente Counter (Pages/Counter.razor).

  3. En el explorador, vaya a la página Counter en /counter. Espere unos segundos para que el proxy de depuración se cargue y ejecute. Seleccione el botón Haga clic en mí para alcanzar el punto de interrupción.

  4. En Visual Studio, revise el valor del campo currentCount en la ventana Variables locales.

  5. Presione F5 para continuar la ejecución.

También puede depurar código de servidor en el proyecto Server:

  1. Establezca un punto de interrupción en la página Pages/FetchData.razor de OnInitializedAsync.
  2. Establezca un punto de interrupción en WeatherForecastController en el método de acción Get.
  3. Vaya a la página Fetch Data para alcanzar el primer punto de interrupción en el componente FetchData justo antes de que emita una solicitud HTTP al servidor.
  4. Presione F5 para continuar la ejecución y, luego, alcance el punto de interrupción en el servidor en WeatherForecastController.
  5. Vuelva a presionar F5 para permitir que la ejecución continúe y ver la tabla de pronóstico meteorológico representada en el explorador.

Los puntos de interrupción no se alcanzan durante el inicio de la aplicación antes de que se ejecute el proxy de depuración. Esto incluye los puntos de interrupción del archivo Program y los de los OnInitialized{Async} métodos de ciclo de vida de los componentes que se cargan según la primera página solicitada por la aplicación.

No admite Iniciar sin depuración (Ctrl+F5 [Windows] o +F5 [macOS]). Cuando la aplicación se ejecuta en la configuración de depuración, la sobrecarga de depuración siempre genera una pequeña reducción del rendimiento.

Asociación a una sesión de depuración de Visual Studio Code existente

Para asociar a una aplicación Blazor en ejecución, abra el archivo .vscode/launch.json y reemplace el marcador de posición {URL} por la dirección URL donde se ejecuta la aplicación:

{
  "name": "Attach and Debug",
  "type": "blazorwasm",
  "request": "attach",
  "url": "{URL}"
}

Opciones de inicio de Visual Studio Code

Las opciones de configuración de inicio de la siguiente tabla son compatibles con el tipo de depuración blazorwasm (.vscode/launch.json).

Opción Descripción
browser El explorador que se va a iniciar para la sesión de depuración. Se establece en edge o chrome. Tiene como valor predeterminado edge.
cwd El directorio de trabajo en el que se va a iniciar la aplicación.
request Use launch para iniciar y adjuntar una sesión de depuración a una aplicación Blazor WebAssembly o attach para adjuntar una sesión de depuración a una aplicación que ya está en ejecución.
timeout El número de milisegundos que se esperarán para adjuntar la sesión de depuración. El valor predeterminado es 30 000 milisegundos (30 segundos).
trace Se usa para generar registros desde el depurador de JS. Se establece en true para generar registros.
url La dirección URL que se va a abrir en el explorador durante la depuración.
webRoot Especifica la ruta de acceso absoluta del servidor web. Se debe establecer si una aplicación se envía desde una subruta.

Las opciones adicionales de la tabla siguiente solo se aplican a aplicaciones Blazor WebAssembly hospedadas.

Opción Descripción
env Las variables de entorno que se van a proporcionar al proceso iniciado. Solo se aplica si hosted está establecido en true.
hosted Se debe establecer en true si se inicia y depura una aplicación hospedada Blazor WebAssembly.
program Una referencia al archivo ejecutable para ejecutar el servidor de la aplicación hospedada. Se debe establecer si hosted es true.

Depuración de Blazor WebAssembly con Google Chrome o Microsoft Edge

Las instrucciones de esta sección se aplican a la depuración de aplicaciones Blazor WebAssembly en:

  • Google Chrome que se ejecuta en Windows o macOS.
  • *Microsoft Edge que se ejecuta en Windows.
  1. Ejecute la aplicación en un shell de comandos con dotnet watch (o dotnet run).

  2. Inicie un explorador y vaya a la dirección URL de la aplicación.

  3. Para iniciar la depuración remota, presione:

    • Mayús+Alt+d en Windows.
    • Mayús++d en macOS.

    El explorador debe ejecutarse con la depuración remota habilitada, lo cual no es el valor predeterminado. Si la depuración remota está deshabilitada, aparece una página de error que informa de que no se puede encontrar la pestaña del explorador depurable con instrucciones para iniciar el explorador con el puerto de depuración abierto. Siga las instrucciones del explorador.

    Después de seguir las instrucciones para habilitar la depuración remota, la aplicación se abre en una nueva ventana del explorador. Inicie la depuración remota presionando la combinación HotKey en la nueva ventana del explorador:

    • Mayús+Alt+d en Windows.
    • Mayús++d en macOS.

    Se abre una nueva ventana del explorador de herramientas de desarrollo que muestra una imagen fantasma de la aplicación.

    Nota:

    Si ha seguido las instrucciones para abrir una nueva pestaña del explorador con la depuración remota habilitada, puede cerrar la ventana original del explorador, dejando abierta la segunda ventana con la primera pestaña que ejecuta la aplicación y la segunda pestaña que ejecuta el depurador.

  4. Tras unos instantes, en la pestaña Orígenes se mostrará una lista de los ensamblados .NET y páginas de la aplicación.

  5. Abre el nodo file://. En el código de componente (archivos .razor) y archivos de código de C# (.cs), los puntos de interrupción que establezca se alcanzan cuando el código se ejecuta en la pestaña del explorador de la aplicación (la pestaña inicial abierta después de iniciar la depuración remota). Después de alcanzar un punto de interrupción, recorra el código paso a paso (F10) o reanude (F8) la ejecución del código normalmente en la pestaña de depuración.

En la depuración del explorador basado en Chromium, Blazor proporciona un proxy de depuración que implementa el protocolo Chrome DevTools y aumenta el protocolo con información específica de .NET. Cuando se presiona el método abreviado de teclado de depuración, Blazor apunta a Chrome DevTools en el proxy. El proxy se conecta a la ventana del explorador que se quiere depurar (de ahí la necesidad de habilitar la depuración remota).

Depuración de una aplicación Blazor WebAssembly con Firefox

Las instrucciones de esta sección se aplican a la depuración de aplicaciones Blazor WebAssembly en una instancia de Firefox que se ejecuta en Windows.

La depuración de una aplicación Blazor WebAssembly con Firefox requiere configurar el explorador para la depuración remota y conectarse al explorador mediante las herramientas de desarrollo del explorador a través del proxy de depuración WebAssembly de .NET.

Nota:

La depuración en Firefox desde Visual Studio no se admite en este momento.

Para depurar una aplicación Blazor WebAssembly en Firefox durante el desarrollo:

  1. Configurar Firefox:
    • Abre about:config en una nueva pestaña del explorador. Lea y descarte la advertencia que aparece.
    • Habilita devtools.debugger.remote-enabled estableciendo su valor en True.
    • Habilita devtools.chrome.enabled estableciendo su valor en True.
    • Deshabilita estableciendo devtools.debugger.prompt-connection su valor en False.
  2. Cierra todas las instancias de Firefox.
  3. Ejecuta la aplicación en un shell de comandos con dotnet watch (o dotnet run).
  4. Vuelve a iniciar el explorador Firefox y vaya a la aplicación.
  5. Abre about:debugging en una nueva pestaña del explorador. Dejar esta pestaña abierta.
  6. Vuelve a la pestaña donde se ejecuta la aplicación. Inicia la depuración remota presionando Mayús+Alt+d.
  7. En la pestaña Debugger, abre el archivo de código fuente de la aplicación que deseas depurar en el nodo file:// y establece un punto de interrupción. Por ejemplo, establece un punto de interrupción en la línea currentCount++; del método IncrementCount del componente Counter (Pages/Counter.razor).
  8. Navega hasta la página del componente Counter (/counter) en la pestaña del navegador de la aplicación y selecciona el botón del contador para alcanzar el punto de interrupción.
  9. Presiona F5 para continuar la ejecución en la pestaña depuración.

Interrumpir las operaciones ante excepciones no controladas

El depurador no se interrumpe en excepciones no controladas de forma predeterminada porque Blazor detecta las excepciones no controladas por código de desarrollador.

Interrumpir las operaciones ante excepciones no controladas:

  • Abre la configuración de excepciones del depurador (Depurar>Windows>Configuración de excepciones) en Visual Studio.
  • Establece la siguiente configuración de excepciones de JavaScript:
    • Todas las excepciones
    • Excepciones no detectadas

Mapas de origen del explorador

Los mapas de origen del explorador permiten al explorador volver a asignar los archivos compilados a sus archivos de código fuente originales y se suelen usar para la depuración del lado cliente. Sin embargo, en la actualidad Blazor no asigna C# directamente a JavaScript o WASM. En su lugar, Blazor realiza la interpretación de IL en el explorador, por lo que los mapas de origen no son pertinentes.

Configuración de firewall

Si un firewall bloquea la comunicación con el proxy de depuración, cree una regla de excepción de firewall que permita la comunicación entre el explorador y el proceso NodeJS.

Advertencia

La modificación de una configuración de firewall debe realizarse con cuidado para evitar la creación de vulnerabilidades de seguridad. Aplica con cuidado las instrucciones de seguridad, sigue las recomendaciones de seguridad y respeta las advertencias realizadas por el fabricante del firewall.

Permitir la comunicación abierta con el proceso NodeJS:

  • Abre el servidor de Node en cualquier conexión, en función de la configuración y las funcionalidades del firewall.
  • Podría ser arriesgado en función de la red.
  • Solo se recomienda en los equipos de los desarrolladores.

Si es posible, permite solo la comunicación abierta con el proceso NodeJSen redes privadas o de confianza.

Para obtener instrucciones de configuración del Firewall de Windows, consulta Crear una regla de programa o servicio de entrada. Para obtener más información, consulta Firewall de Windows Defender con seguridad avanzada y los artículos relacionados en la serie de documentos sobre el Firewall de Windows.

Solucionar problemas

Si te encuentras con errores, las sugerencias siguientes pueden ser útiles:

  • Elimina los puntos de interrupción:
    • Google Chrome: en la pestaña Depurador, abre las herramientas de desarrollo del explorador. En la consola, ejecuta localStorage.clear() para quitar los puntos de interrupción.
    • Microsoft Edge: en la pestaña Aplicación, abre almacenamiento local. Haz clic con el botón derecho en el sitio y seleccione Borrar.
  • Confirma que instalaste el certificado de desarrollo HTTPS de ASP.NET Core y que es de confianza. Para obtener más información, consulta Aplicación de HTTPS en ASP.NET Core.
  • Visual Studio requiere la opción Habilitar depuración de JavaScript para ASP.NET (Chrome y Edge), en Herramientas>Opciones>Depuración>General. Es el valor predeterminado para Visual Studio. Si la depuración no funciona, confirma que la opción está seleccionada.
  • Si tu entorno usa un proxy HTTP, asegúrate de que localhost esté incluido en la configuración de omisión del proxy. Esto puede hacerse al establecer la variable de entorno NO_PROXY en alguna de las siguientes opciones:
    • Archivo launchSettings.json del proyecto.
    • En el nivel de usuario o de entorno del sistema para que se aplique a todas las aplicaciones. Si usas una variable de entorno, reinicia Visual Studio para que el cambio surta efecto.
  • Asegúrate de que los firewalls o servidores proxy no bloquean la comunicación con el proxy de depuración (proceso NodeJS). Para obtener más información, consulta la sección Configuración de firewall.

Puntos de interrupción de OnInitialized{Async} no ejecutados

El proxy de depuración del marco de Blazor no se inicia instantáneamente al iniciarse la aplicación, por lo que es posible que no se alcancen los puntos de interrupción de los métodos de ciclo de vida de OnInitialized{Async}. Se recomienda agregar un retraso al principio del cuerpo del método para dar al proxy de depuración un tiempo para que se inicie antes de que se ejecute el punto de interrupción. Puedes incluir el retraso según una directiva de compilador if para asegurarte de que el retraso no está presente en una compilación de versión de la aplicación.

OnInitialized:

protected override void OnInitialized()
{
#if DEBUG
    Thread.Sleep(10000);
#endif

    ...
}

OnInitializedAsync:

protected override async Task OnInitializedAsync()
{
#if DEBUG
    await Task.Delay(10000);
#endif

    ...
}

Tiempo de espera de Visual Studio (Windows)

Si Visual Studio inicia una excepción relacionada con que el adaptador de depuración no ha podido iniciarse en la que se menciona que se ha alcanzado el tiempo de espera, puedes ajustar el tiempo de espera con una configuración del registro:

VsRegEdit.exe set "<VSInstallFolder>" HKCU JSDebugger\Options\Debugging "BlazorTimeoutInMilliseconds" dword {TIMEOUT}

El marcador de posición {TIMEOUT} del comando anterior se expresa en milisegundos. Por ejemplo, un minuto se asigna como 60000.