Partager via


Déboguer une tâche en arrière-plan

API importantes

Découvrez comment déboguer une tâche en arrière-plan, notamment dans le cadre de son activation et du suivi de débogage dans le journal des événements Windows.

Débogage des tâches en arrière-plan hors processus et en arrière-plan in-process

Cette rubrique traite principalement des tâches en arrière-plan qui s’exécutent dans un processus distinct que l’application hôte. Si vous déboguez une tâche en arrière-plan in-process, vous ne disposez pas d’un projet de tâche en arrière-plan distinct et pouvez définir un point d’arrêt sur OnBackgroundActivated() (où votre code en arrière-plan in-process s’exécute) et voir l’étape 2 dans Déclencher manuellement les tâches en arrière-plan pour déboguer le code de tâche en arrière-plan, ci-dessous, pour obtenir des instructions sur la façon de déclencher l’exécution de votre code en arrière-plan.

Vérifiez que le projet de tâche en arrière-plan est correctement configuré

Cette rubrique suppose que vous disposez déjà d’une application existante avec une tâche en arrière-plan pour déboguer. L’exemple suivant est spécifique aux tâches en arrière-plan qui s’exécutent hors processus et ne s’appliquent pas aux tâches en arrière-plan in-process.

  • En C# et C++, vérifiez que le projet principal fait référence au projet de tâche en arrière-plan. Si cette référence n’est pas en place, la tâche en arrière-plan ne sera pas incluse dans le package d’application.
  • En C# et C++, vérifiez que le type de sortie du projet de tâche en arrière-plan est « Composant Windows Runtime ».
  • La classe d’arrière-plan doit être déclarée dans l’attribut de point d’entrée dans le manifeste du package.

Déclencher manuellement des tâches en arrière-plan pour déboguer le code de tâche en arrière-plan

Les tâches en arrière-plan peuvent être déclenchées manuellement via Microsoft Visual Studio. Vous pouvez ensuite parcourir le code et le déboguer.

  1. En C#, placez un point d’arrêt dans la méthode Run de la classe d’arrière-plan (pour les tâches en arrière-plan in-process, placez le point d’arrêt dans App.OnBackgroundActivated()) et/ou écrivez la sortie de débogage à l’aide de System.Diagnostics.

    En C++, placez un point d’arrêt dans la fonction Run de la classe d’arrière-plan (pour les tâches en arrière-plan in-process, placez le point d’arrêt dans App.OnBackgroundActivated()) et/ou écrivez la sortie de débogage à l’aide de OutputDebugString.

  2. Exécutez votre application dans le débogueur, puis déclenchez la tâche en arrière-plan à l’aide de la barre d’outils Événements de cycle de vie. Cette liste déroulante affiche les noms des tâches en arrière-plan qui peuvent être activées par Visual Studio.

    Remarque

    Les options de barre d’outils Événements de cycle de vie ne sont pas affichées par défaut dans Visual Studio. Pour afficher ces options, cliquez avec le bouton droit sur la barre d’outils active dans Visual Studio et vérifiez que l’option Déboguer l’emplacement est activé.

    Pour que cela fonctionne, la tâche en arrière-plan doit déjà être inscrite et elle doit toujours attendre le déclencheur. Par exemple, si une tâche en arrière-plan a été inscrite auprès d’un TimeTrigger one-shot et que ce déclencheur a déjà été déclenché, le lancement de la tâche via Visual Studio n’aura aucun effet.

    Remarque

    Les tâches en arrière-plan utilisant les déclencheurs suivants ne peuvent pas être activées de cette façon : déclencheur d’application, déclencheur MediaProcessing, ControlChannelTrigger, PushNotificationTrigger et tâches en arrière-plan à l’aide d’un SystemTrigger avec le type de déclencheur SmsReceived.
    Le déclencheur d’application et MediaProcessingTrigger peuvent être signalés manuellement dans le code avec trigger.RequestAsync().

    débogage des tâches en arrière-plan

  3. Lorsque la tâche en arrière-plan s’active, le débogueur l’attache et affiche la sortie de débogage dans VS.

Débogage de l’activation de tâche en arrière-plan

Remarque

Cette section est spécifique aux tâches en arrière-plan qui s’exécutent hors processus et ne s’applique pas aux tâches en arrière-plan in-process.

L’activation des tâches en arrière-plan dépend de trois éléments :

  • Nom et espace de noms de la classe de tâches en arrière-plan
  • Attribut de point d’entrée spécifié dans le manifeste du package
  • Point d’entrée spécifié par votre application lors de l’inscription de la tâche en arrière-plan
  1. Utilisez Visual Studio pour noter le point d’entrée de la tâche en arrière-plan :

    • Dans C# et C++, notez le nom et l’espace de noms de la classe de tâches en arrière-plan spécifiées dans le projet de tâche en arrière-plan.
  2. Utilisez le concepteur de manifeste pour vérifier que la tâche en arrière-plan est correctement déclarée dans le manifeste du package :

    • En C# et C++, l’attribut de point d’entrée doit correspondre à l’espace de noms de tâche en arrière-plan suivi du nom de la classe. Par exemple : RuntimeComponent1.MyBackgroundTask.
    • Tous les types de déclencheurs utilisés avec la tâche doivent également être spécifiés.
    • L’exécutable NE DOIT PAS être spécifié, sauf si vous utilisez ControlChannelTrigger ou PushNotificationTrigger.
  3. Windows uniquement. Pour afficher le point d’entrée utilisé par Windows pour activer la tâche en arrière-plan, activez le suivi du débogage et utilisez le journal des événements Windows.

    Si vous suivez cette procédure et que le journal des événements affiche le point d’entrée ou le déclencheur incorrects pour la tâche en arrière-plan, votre application n’inscrit pas correctement la tâche en arrière-plan. Pour obtenir de l’aide sur cette tâche, consultez Inscrire une tâche en arrière-plan.

    1. Ouvrez l’observateur d’événements en accédant à l’écran d’accueil et en recherchant eventvwr.exe.
    2. Accédez aux journaux d’application et de services ->Microsoft ->Windows ->BackgroundTaskInfrastructure dans l’observateur d’événements.
    3. Dans le volet Actions, sélectionnez Afficher les> journaux d’analyse et de débogage pour activer la journalisation des diagnostics.
    4. Sélectionnez le journal de diagnostic, puis cliquez sur Activer le journal.
    5. Essayez maintenant d’utiliser votre application pour inscrire et réactiver la tâche en arrière-plan.
    6. Affichez les journaux de diagnostic pour obtenir des informations détaillées sur les erreurs. Cela inclut le point d’entrée inscrit pour la tâche en arrière-plan.

Observateur d’événements pour les informations de débogage des tâches en arrière-plan

Tâches en arrière-plan et déploiement de package Visual Studio

Si une application qui utilise des tâches en arrière-plan est déployée à l’aide de Visual Studio, et que la version (principale et/ou mineure) spécifiée dans le Concepteur de manifeste est ensuite mise à jour, le redéploiement de l’application avec Visual Studio peut entraîner le blocage des tâches en arrière-plan de l’application. Cela peut être corrigé comme suit :

  • Utilisez Windows PowerShell pour déployer l’application mise à jour (au lieu de Visual Studio) en exécutant le script généré en même temps que le package.
  • Si vous avez déjà déployé l’application à l’aide de Visual Studio et que ses tâches en arrière-plan sont désormais bloquées, redémarrez ou déconnectez-vous/connectez-vous pour que les tâches en arrière-plan de l’application fonctionnent à nouveau.
  • Vous pouvez sélectionner l’option de débogage « Toujours réinstaller mon package » pour éviter cela dans les projets C#.
  • Attendez que l’application soit prête pour le déploiement final pour incrémenter la version du package (ne la modifiez pas lors du débogage).

Notes

  • Vérifiez que votre application vérifie les inscriptions de tâches en arrière-plan existantes avant d’inscrire à nouveau la tâche en arrière-plan. Plusieurs inscriptions de la même tâche en arrière-plan peuvent entraîner des résultats inattendus en exécutant la tâche en arrière-plan plusieurs fois chaque fois qu’elle est déclenchée.
  • Si la tâche en arrière-plan nécessite un accès à l’écran de verrouillage, veillez à placer l’application sur l’écran de verrouillage avant d’essayer de déboguer la tâche en arrière-plan. Pour plus d’informations sur la spécification des options de manifeste pour les applications compatibles avec l’écran de verrouillage, consultez Déclarer des tâches en arrière-plan dans le manifeste de l’application.
  • Les paramètres d’inscription des tâches en arrière-plan sont validés au moment de l’inscription. Une erreur est retournée si l’un des paramètres d’inscription n’est pas valide. Assurez-vous que votre application gère correctement les scénarios où l’inscription des tâches en arrière-plan échoue. Si votre application dépend plutôt d’avoir un objet d’inscription valide après avoir tenté d’inscrire une tâche, il peut se bloquer.

Pour plus d’informations sur l’utilisation de VS pour déboguer une tâche en arrière-plan, consultez Comment déclencher des événements d’interruption, de reprise et d’arrière-plan dans les applications UWP.