Depurar una tarea en segundo plano
API importantes
Aprende a depurar una tarea en segundo plano, incluida la activación y el seguimiento de depuración de la tarea en segundo plano en el registro de eventos de Windows.
Depuración de tareas en segundo plano fuera de proceso frente a tareas en segundo plano en proceso
En este tema se abordan principalmente las tareas en segundo plano que se ejecutan en un proceso independiente que la aplicación host. Si está depurando una tarea en segundo plano en proceso, no tendrá un proyecto de tarea en segundo plano independiente y puede establecer un punto de interrupción en OnBackgroundActivated() (donde se ejecuta el código en segundo plano en proceso) y ver el paso 2 en Desencadenar tareas en segundo plano manualmente para depurar código de tarea en segundo plano, a continuación, para obtener instrucciones sobre cómo desencadenar el código en segundo plano para ejecutarse.
Asegúrese de que el proyecto de tarea en segundo plano esté configurado correctamente.
En este tema se supone que ya tiene una aplicación existente con una tarea en segundo plano para depurar. Lo siguiente es específico de las tareas en segundo plano que se ejecutan fuera de proceso y no se aplican a las tareas en segundo plano dentro del proceso.
- En C# y C++, asegúrese de que el proyecto principal hace referencia al proyecto de tarea en segundo plano. Si esta referencia no está en su lugar, la tarea en segundo plano no se incluirá en el paquete de la aplicación.
- En C# y C++, asegúrese de que el tipo de salida del proyecto de tarea en segundo plano es "Componente de Windows Runtime".
- La clase en segundo plano debe declararse en el atributo de punto de entrada en el manifiesto del paquete.
Desencadenar tareas en segundo plano manualmente para depurar código de tarea en segundo plano
Las tareas en segundo plano se pueden desencadenar manualmente a través de Microsoft Visual Studio. A continuación, puede recorrer el código y depurarlo.
En C#, coloque un punto de interrupción en el método Run de la clase en segundo plano (para las tareas en segundo plano en proceso coloque el punto de interrupción en App.OnBackgroundActivated()) o escriba la salida de depuración mediante System.Diagnostics.
En C++, coloque un punto de interrupción en la función Run de la clase en segundo plano (para las tareas en segundo plano en proceso coloque el punto de interrupción en App.OnBackgroundActivated()) o escriba la salida de depuración mediante OutputDebugString.
Ejecute la aplicación en el depurador y, a continuación, desencadene la tarea en segundo plano mediante la barra de herramientas Eventos de ciclo de vida. En esta lista desplegable se muestran los nombres de las tareas en segundo plano que Visual Studio puede activar.
Nota:
Las opciones de la barra de herramientas Eventos de ciclo de vida no se muestran de forma predeterminada en Visual Studio. Para mostrar estas opciones, haga clic con el botón derecho en la barra de herramientas actual de Visual Studio y asegúrese de que la opción Ubicación de depuración está habilitada.
Para que esto funcione, la tarea en segundo plano ya debe estar registrada y debe estar esperando el desencadenador. Por ejemplo, si una tarea en segundo plano se registró con un TimeTrigger de un solo disparo y ese desencadenador ya se ha desencadenado, iniciar la tarea a través de Visual Studio no tendrá ningún efecto.
Nota:
Las tareas en segundo plano que usan los siguientes desencadenadores no se pueden activar de esta manera: Desencadenador de aplicación, Desencadenador mediaProcessing, ControlChannelTrigger, PushNotificationTrigger y tareas en segundo plano mediante systemTrigger con el tipo de desencadenador SmsReceived.
El desencadenador de la aplicación y MediaProcessingTrigger se pueden señalar manualmente en el código contrigger.RequestAsync()
.Cuando se activa la tarea en segundo plano, el depurador se asociará a él y mostrará la salida de depuración en VS.
Depuración de la activación de tareas en segundo plano
Nota:
Esta sección es específica de las tareas en segundo plano que se ejecutan fuera de proceso y no se aplica a las tareas en segundo plano dentro del proceso.
La activación de tareas en segundo plano depende de tres cosas:
- Nombre y espacio de nombres de la clase de tarea en segundo plano
- Atributo de punto de entrada especificado en el manifiesto del paquete
- El punto de entrada especificado por la aplicación al registrar la tarea en segundo plano
Use Visual Studio para anotar el punto de entrada de la tarea en segundo plano:
- En C# y C++, anote el nombre y el espacio de nombres de la clase de tarea en segundo plano especificada en el proyecto de tarea en segundo plano.
Use el diseñador de manifiestos para comprobar que la tarea en segundo plano está declarada correctamente en el manifiesto del paquete:
- En C# y C++, el atributo de punto de entrada debe coincidir con el espacio de nombres de tarea en segundo plano seguido del nombre de clase. Por ejemplo: RuntimeComponent1.MyBackgroundTask.
- También se deben especificar todos los tipos de desencadenador que se usan con la tarea.
- El archivo ejecutable NO DEBE especificarse a menos que use ControlChannelTrigger o PushNotificationTrigger.
Solo Windows. Para ver el punto de entrada usado por Windows para activar la tarea en segundo plano, habilite el seguimiento de depuración y use el registro de eventos de Windows.
Si sigue este procedimiento y el registro de eventos muestra el punto de entrada o desencadenador incorrectos para la tarea en segundo plano, la aplicación no registra correctamente la tarea en segundo plano. Para obtener ayuda con esta tarea, consulte Registrar una tarea en segundo plano.
- Abra el visor de eventos y vaya a la pantalla Inicio y busque eventvwr.exe.
- Vaya a Registros de aplicaciones y servicios ->Microsoft -Windows ->>BackgroundTaskInfrastructure en el visor de eventos.
- En el panel de acciones, seleccione Ver ->Mostrar registros analíticos y de depuración para habilitar el registro de diagnóstico.
- Seleccione el registro de diagnóstico y haga clic en Habilitar registro.
- Ahora intente usar la aplicación para registrar y activar la tarea en segundo plano de nuevo.
- Vea los registros de diagnóstico para obtener información detallada sobre errores. Esto incluirá el punto de entrada registrado para la tarea en segundo plano.
Tareas en segundo plano y implementación de paquetes de Visual Studio
Si una aplicación que usa tareas en segundo plano se implementa mediante Visual Studio y la versión (principal o secundaria) especificada en el Diseñador de manifiestos se actualiza y, posteriormente, volver a implementar la aplicación con Visual Studio puede provocar que las tareas en segundo plano de la aplicación se detengan. Esto se puede solucionar de la siguiente manera:
- Use Windows PowerShell para implementar la aplicación actualizada (en lugar de Visual Studio) ejecutando el script generado junto con el paquete.
- Si ya ha implementado la aplicación con Visual Studio y sus tareas en segundo plano ahora están detenidas, reinicie o cierre sesión o inicie sesión para que las tareas en segundo plano de la aplicación vuelvan a funcionar.
- Puede seleccionar la opción de depuración "Volver a instalar siempre mi paquete" para evitarlo en proyectos de C#.
- Espere hasta que la aplicación esté lista para que la implementación final incremente la versión del paquete (no la cambie mientras se depura).
Comentarios
- Asegúrese de que la aplicación comprueba si hay registros de tareas en segundo plano existentes antes de volver a registrar la tarea en segundo plano. Varios registros de la misma tarea en segundo plano pueden provocar resultados inesperados ejecutando la tarea en segundo plano más de una vez cada vez que se desencadena.
- Si la tarea en segundo plano requiere acceso a la pantalla de bloqueo, asegúrese de colocar la aplicación en la pantalla de bloqueo antes de intentar depurar la tarea en segundo plano. Para obtener información sobre cómo especificar opciones de manifiesto para aplicaciones compatibles con la pantalla de bloqueo, consulte Declarar tareas en segundo plano en el manifiesto de aplicación.
- Los parámetros de registro de tareas en segundo plano se validan en el momento del registro. Se devuelve un error si alguno de los parámetros de registro no es válido. Asegúrese de que la aplicación controla correctamente los escenarios en los que se produce un error en el registro de tareas en segundo plano; en su lugar, la aplicación depende de tener un objeto de registro válido después de intentar registrar una tarea, puede bloquearse.
Para obtener más información sobre el uso de VS para depurar una tarea en segundo plano, consulta Cómo desencadenar eventos de suspensión, reanudación y en segundo plano en aplicaciones para UWP.
Temas relacionados
- Crear y registrar una tarea en segundo plano fuera del proceso
- Crear y registrar una tarea en segundo plano dentro del proceso
- Registrar una tarea en segundo plano
- Declarar tareas en segundo plano en el manifiesto de la aplicación
- Directrices para tareas en segundo plano
- Desencadenación de eventos de suspensión, reanudación y en segundo plano en aplicaciones para UWP
- Introducción al análisis de código para .NET en Visual Studio