Cómo depurar una tarea en segundo plano (aplicaciones de Windows en tiempo de ejecución)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Aprende cómo 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.

Lo que debes saber

Tecnologías

Requisitos previos

  • En este tema se supone que tiene una aplicación existente con una tarea en segundo plano que necesitas depurar.

Instrucciones

Asegúrate de que el proyecto de tarea en segundo plano está correctamente configurado

  • En C# y C++, asegúrate de que el proyecto principal hace referencia al proyecto de tarea en segundo plano. Si esta referencia no se realiza, la tarea en segundo plano no se incluirá en el paquete de la aplicación. usando el atributo de punto de entrada.
  • En C# y C++, asegúrate de que el Output type del proyecto de tarea en segundo plano es "Archivo WinMD".
  • En JavaScript, el trabajo de tarea en segundo plano debe estar en su propio archivo JavaScript.
  • La tarea en segundo plano debe declararse en el manifiesto del paquete. Las tareas de JavaScript se declaran usando el atributo de página de inicio, mientras que otras tareas se declaran usando el atributo de punto de entrada.

Desencadenar manualmente las tareas en segundo plano para depurar el código de la tarea en segundo plano

Las tareas en segundo plano se pueden desencadenar manualmente, a través de Microsoft Visual Studio Express 2012 for Windows 8. Después, puedes recorrer el código y depurarlo.

  1. En C#, coloca un punto de interrupción en el método Run o escribe el resultado de depuración mediante System.Diagnostics.

    En C++, coloca un punto de interrupción en el método Run o escribe el resultado de depuración mediante OutputDebugString.

    En JavaScript, coloca un punto de interrupción en el archivo JavaScript de la tarea en segundo plano o escribe el resultado de depuración mediante debug object.

  2. Desencadena la tarea en segundo plano a través del menú desplegable de suspender, disponible en la barra de herramientas Ubicación de depuración. Este menú desplegable muestra los nombres de las tareas en segundo plano que pueden activarse con Visual Studio.

    Para que esto funcione, la tarea en segundo plano ya debe estar registrada y debe seguir esperando el desencadenador. Por ejemplo, si una tarea en segundo plano se registró con un TimeTrigger y ese desencadenador ya está activado, iniciar la tarea a través de Visual Studio no tendrá efecto.

    Nota  Las tareas en segundo plano que usan ControlChannelTrigger o PushNotificationTrigger, así como las tareas en segundo plano que usan SystemTrigger con el tipo de desencadenador SmsReceived, no pueden activarse de esta manera.

     

    Depurar tareas en segundo plano

  3. Cuando la tarea en segundo plano se activa, el depurador se adjuntará a ella y mostrará el resultado de depuración en VS.

Depurar la activación de tareas en segundo plano

La activación de la tarea en segundo plano depende de que tres elementos coincidan correctamente. Este procedimiento muestra cómo comprobar y asegurarse de que coinciden.

  • El nombre y el espacio de nombres de la clase de tarea en segundo plano (para Javascript, la ruta de acceso y el nombre de archivo de la tarea)
  • El atributo de punto de entrada especificado en el manifiesto del paquete (para Javascript, el atributo de página de inicio)
  • El punto de entrada especificado por la aplicación al registrar la tarea en segundo plano
  1. Usa Visual Studio para anotar el punto de entrada de la tarea en segundo plano:

    • En C# y C++, anota el nombre y el espacio de nombres de la clase de tarea en segundo plano especificada en el proyecto de tarea en segundo plano.
    • En JavaScript, anota la ruta de acceso al archivo de tarea en segundo plano y el nombre del archivo.
  2. Usa el diseñador de manifiestos para comprobar que la tarea en segundo plano se ha declarado correctamente en el manifiesto de la aplicación:

    • En C# y C++, el atributo de punto de entrada debe coincidir con el espacio de nombres de la tarea en segundo plano seguido por el nombre de clase. Por ejemplo: Tasks.MyBackgroundTask.
    • En JavaScript, el atributo de página de inicio debe ser la ruta de acceso al archivo JavaScript del trabajo de tarea en segundo plano. Por ejemplo: js\MyBackgroundTask.js.
    • También deben especificarse todos los tipos de desencadenadores usados con la tarea.
    • El ejecutable no debe especificarse a menos que estés usando ControlChannelTrigger o PushNotificationTrigger.
  3. Solo Windows. Para ver el punto de entrada que usa Windows para activar la tarea en segundo plano, enable debug tracing y usa el registro de eventos de Windows.

    Si sigues este procedimiento y el registro de eventos muestra un punto de entrada o un desencadenador incorrecto para la tarea en segundo plano, la aplicación no está registrando la tarea en segundo plano correctamente. Para obtener ayuda con esta tarea, consulta Cómo registrar una tarea en segundo plano.

    1. Abre el visor de eventos; para ello, ve a la pantalla Inicio y busca eventvwr.exe.
    2. Ve a Registros de aplicaciones y servicios -> Microsoft -> Windows -> BackgroundTaskInfrastructure en el visor de eventos.
    3. En el panel de acciones, selecciona Vista -> Mostrar registros analíticos y de depuración para habilitar el inicio de sesión.
    4. Selecciona el Registro de diagnóstico y haz clic en Habilitar registro.
    5. Ahora, intenta usar tu aplicación para registrar y activar de nuevo la tarea en segundo plano.
    6. Consulta los registros de diagnóstico para obtener información detallada del error. Esto incluirá el punto de entrada registrado para la tarea en segundo plano.

Visor de eventos para información de depuración de tareas en segundo plano

Tareas en segundo plano e implementación del paquete de Visual Studio

Si una aplicación que usa tareas en segundo plano se implementa con Visual Studio y la versión (mayor y/o menor) especificada en el diseñador de manifiestos después se actualiza, al reimplementar posteriormente la aplicación con Visual Studio es posible que las tareas en segundo plano de la aplicación se atasquen. Esto puede remediarse de la siguiente manera:

  • Usa Windows PowerShell para implementar la aplicación actualizada (en lugar de Visual Studio) mediante la ejecución del script generado junto con el paquete.
  • Si ya implementaste la aplicación con Visual Studio y las tareas en segundo plano de la aplicación ahora están atascadas, reinicia o cierra sesión y vuelve a abrirla para que las tareas en segundo plano vuelvan a funcionar.
  • Puedes seleccionar la opción de depuración "Reinstalar siempre mi paquete" para evitar esto en proyectos con C#.
  • Espera hasta que la aplicación esté lista para la implementación final antes de incrementar la versión del paquete (no lo cambies durante la depuración).

Observaciones

Sugerencias adicionales para depurar tareas en segundo plano:

  • Las tareas en segundo plano de JavaScript necesitan llamar a close() cuando se completan. Si la tarea en segundo plano no llama a close(), el proceso de la tarea continua ejecutándose. Esto puede gastar batería y provocar un comportamiento inesperado.
  • Asegúrate de que tu aplicación compruebe registros de tareas en segundo plano existentes antes de registrar la tarea nuevamente. Varios registros de la misma tarea puede causar resultados inesperados al ejecutar la tarea en segundo plano más de una vez cada vez que esta se desencadena. Para obtener ayuda con esta tarea, consulta Cómo registrar una tarea en segundo plano.
  • Si la tarea en segundo plano requiere acceso a la pantalla de bloqueo, asegúrate de poner la aplicación en la pantalla de bloqueo antes de intentar depurar la tarea en segundo plano. Para obtener información acerca de cómo especificar opciones de manifiesto para aplicaciones compatibles con la pantalla de bloqueo, consulta Cómo mostrar notificaciones en la pantalla de bloqueo y Cómo declarar tareas en segundo plano en el manifiesto de la aplicación.
  • A partir de Windows 8.1, los parámetros de registro de tareas en segundo plano se validan en el momento de realizar el registro. Se devuelve un error si cualquiera de los parámetros de registro no es válido. Asegúrate de que la aplicación se enfrente correctamente a los escenarios en que se produce un error en el registro de tareas en segundo plano. Si la aplicación depende de que haya un objeto de registro válido después de intentar registrar una tarea, es posible que se bloquee. Por ejemplo, la aplicación puede usar una instrucción condicional para comprobar si hay errores de registro y después volver a probar el registro con errores con valores de parámetros diferentes.

Para obtener más información acerca de cómo usar VS para depurar una tarea en segundo plano, consulta Cómo desencadenar los eventos suspender, reanudar y en segundo plano en aplicaciones de la Tienda Windows.

Temas relacionados

Inicio rápido: creación y registro de una tarea en segundo plano

Cómo registrar una tarea en segundo plano

Cómo declarar tareas en segundo plano en el manifiesto de la aplicación

Directrices y listas de comprobación para tareas en segundo plano

Diseñador de manifiestos

Cómo desencadenar los eventos suspender, reanudar y en segundo plano, en aplicaciones de la Tienda Windows

Analizar la calidad del código de las aplicaciones de la Tienda Windows con el análisis de código de Visual Studio