Compartilhar via


Como depurar uma tarefa em segundo plano (aplicativos do Tempo de Execução do Windows)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Aprenda a depurar uma tarefa em segundo plano, incluindo ativação e rastreamento de depuração de tarefas em seguindo plano no log de eventos do Windows.

O que você precisa saber

Tecnologias

Pré-requisitos

  • Este tópico pressupõe que você possui um aplicativo com uma tarefa em segundo plano que precisa depurar.

Instruções

Verificar se o projeto de tarefa em segundo plano está configurado corretamente

  • Em C# e C++, verifique se o projeto principal faz referência ao projeto de tarefa em segundo plano. Se essa referência não estiver em vigor, a tarefa em segundo plano não será incluída no pacote de aplicativo. usando o atributo de ponto de entrada.
  • Em C# e C++, verifique se o Output type do projeto de tarefa em segundo plano é "Arquivo WinMD".
  • Em JavaScript, o trabalho da tarefa em segundo plano deve estar em seu próprio arquivo JavaScript.
  • A tarefa em segundo plano deve estar declarada no manifesto do pacote. Tarefas JavaScript são declaradas com o uso do atributo da página inicial, enquanto outras tarefas são declaradas com o uso do atributo de ponto de entrada.

Disparar tarefas em segundo plano manualmente para depurar o código dessas tarefas

As tarefas em segundo plano podem ser ativadas manualmente através do Microsoft Visual Studio Express 2012 para Windows 8. Em seguida, você pode percorrer o código e depurá-lo.

  1. No C#, insira um ponto de interrupção no método Run e/ou escreva a saída da depuração usando System.Diagnostics.

    No C++, insira um ponto de interrupção na função Run e/ou escreva a saída da depuração usando OutputDebugString.

    No JavaScript, insira um ponto de interrupção no arquivo JavaScript da tarefa em segundo plano e/ou escreva a saída da depuração usando debug object.

  2. Dispare a tarefa em segundo plano usando o menu suspenso disponível na barra de ferramentas Local de Depuração. Este menu suspenso mostra os nomes das tarefas em segundo plano que podem ser ativadas pelo Visual Studio.

    Para que isso funcione, a tarefa em segundo plano já deve ter sido registrada e ainda deve estar aguardando ser acionada. Por exemplo, se a tarefa em segundo plano foi registrada com um TimeTrigger único e esse gatilho já tiver sido disparado, iniciar a tarefa através do Visual Studio não produzirá qualquer efeito.

    Observação  Tarefas em segundo plano usando ControlChannelTrigger ou PushNotificationTrigger e tarefas em segundo plano usando SystemTrigger com o tipo de gatilho SmsReceived não podem ser ativadas desta maneira.

     

    Depurando tarefas em segundo plano

  3. Quando a tarefa em segundo plano é ativada, o depurador é anexado a ela e exibe a saída da depuração no VS.

Ativação da tarefa em segundo plano a ser depurada

A ativação de tarefas em segundo plano depende de três itens que devem corresponder entre si. Este procedimento mostra como conferir e garantir que todos esses itens estejam correspondendo.

  • O nome e o namespace da classe da tarefa em segundo plano (para Javascript, o caminho e o nome de arquivo da tarefa)
  • O atributo de ponto de entrada especificado no manifesto do pacote (para Javascript, o atributo de página inicial)
  • O ponto de entrada especificado pelo seu aplicativo durante o registro da tarefa em segundo plano
  1. Use o Visual Studio para anotar o ponto de entrada da tarefa em segundo plano:

    • Em C# e C++, anote o nome e o namespace da classe de tarefa em segundo plano especificada no projeto de tarefa em segundo.
    • Em JavaScript, anote o caminho para o arquivo de tarefa em segundo plano e o nome do arquivo.
  2. Use o designer de manifesto para conferir se a tarefa em segundo plano está declarada corretamente no manifesto do pacote:

    • Em C# e C++, o atributo de ponto de entrada deve corresponder ao namespace da tarefa em segundo plano, seguido do nome da classe. Por exemplo: Tasks.MyBackgroundTask.
    • Em JavaScript, o atributo de página inicial deve ser o caminho para o arquivo JavaScript referente ao trabalho da tarefa em segundo plano. Por exemplo: js\MyBackgroundTask.js.
    • Todo(s) o(s) tipo(s) de gatilho usado(s) com a tarefa também deve(m) ser especificado(s).
    • O executável NÃO DEVE ser especificado, a não ser que você esteja usando ControlChannelTrigger ou PushNotificationTrigger.
  3. Windows somente. Para ver o ponto de entrada usado pelo Windows para ativar a tarefa em segundo plano, enable debug tracing e use o log de eventos do Windows.

    Se você seguir este procedimento, e o log de eventos mostrar o gatilho ou ponto de entrada incorreto para a tarefa em segundo plano, é sinal de que o seu aplicativo não está registrando essa tarefa corretamente. Para obter ajuda com essa tarefa, veja Como registrar uma tarefa em segundo plano.

    1. Abra o visualizador de eventos acessando a tela inicial e procurando eventvwr.exe.
    2. Vá para Logs de Aplicativos e Serviços -> Microsoft -> Windows -> BackgroundTaskInfrastructure no visualizador de eventos.
    3. No painel de ações, selecione Exibir -> Mostrar Logs Analíticos e de Depuração para habilitar o log de diagnósticos.
    4. Selecione o Log de diagnósticos e clique em Habilitar Log.
    5. Agora, tente usar seu aplicativo para registrar e ativar a tarefa em segundo plano de novo.
    6. Examine os logs de diagnósticos para obter detalhes dos erros. Essas informações incluirão o ponto de entrada registrada para a tarefa em segundo plano.

Visualizador de eventos para informações de depuração das tarefas em segundo plano

Implantação do pacote Visual Studio e tarefas em segundo plano

Se um aplicativo que utiliza tarefas em segundo plano for implantado com o Visual Studio, e a versão (principal e/ou secundária) especificada no Criador de Manifestos for atualizada, a posterior reimplantação do aplicativo com o Visual Studio poderá causar interrupção nas tarefas em segundo plano do aplicativo. Isso pode ser remediado da seguinte maneira:

  • Use o Windows PowerShell para implantar o aplicativo atualizado (em vez do Visual Studio) executando o script gerado junto com o pacote.
  • Se você já tiver implantado o aplicativo usando o Visual Studio, e suas tarefas em segundo plano estiverem interrompidas, reinicialize ou faça logoff/logon para que essas tarefas voltem a funcionar.
  • Você pode selecionar a opção de depuração "Sempre reinstalar meu pacote" para evitar isso em projetos C#.
  • Aguarde até que o aplicativo esteja pronto para implantação final para incrementar a versão do pacote (não o altere durante a depuração).

Comentários

Dicas adicionais para depuração de tarefas em segundo plano:

  • As tarefas em segundo plano do JavaScript precisam chamar close() quando são concluídas. Se a tarefa em segundo plano não chamar close(), o processo da tarefa continuará em execução. Isso pode consumir bateria e causar um comportamento inesperado.
  • Veja se seu aplicativo verifica os registros de tarefas em segundo plano existentes antes de registrar novamente a tarefa em segundo plano. Vários registros da mesma tarefa em segundo plano podem causar resultados inesperados ao executarem a tarefa em segundo plano mais de uma vez sempre que ela é disparada. Para obter ajuda com essa tarefa, veja Como registrar uma lista de tarefa em segundo plano pendentes.
  • Se a tarefa em segundo plano exigir acesso à tela de bloqueio, coloque o aplicativo na tela de bloqueio antes de tentar depurar essa tarefa. Para obter informações sobre como especificar opções de manifesto para aplicativos compatíveis com a tela de bloqueio, consulte Como mostrar notificações na tela de bloqueio e Como declarar tarefas em tela de fundo no manifesto do aplicativo.
  • A partir do Windows 8.1, os parâmetros de registro de tarefas de segundo plano são validados no momento do registro. Um erro será retornado se algum parâmetro de registro for inválido. Verifique se o aplicativo manipula tranquilamente cenários em que o registro de tarefas de segundo plano apresenta falha - se em vez disso o aplicativo depender de ter um objeto de registro válido depois de tentar registrar uma tarefa, o aplicativo poderá travar. Por exemplo, o aplicativo pode usar uma instrução condicional para verificar se há erros de registro e tentar novamente o registro com falha com valores de parâmetros diferentes.

Para saber mais sobre como usar o VS para depurar uma tarefa em segundo plano, veja Como disparar eventos de suspensão, retomada e segundo plano em aplicativos da Windows Store.

Tópicos relacionados

Guia de início rápido: criar e registrar uma tarefa em segundo plano

Como registrar uma tarefa em segundo plano

Como declarar tarefas em segundo plano no manifesto do aplicativo

Diretrizes e listas de verificação para tarefas em segundo plano

Designer de Manifesto

Como disparar eventos de suspensão, retomada e segundo plano em aplicativos da Windows Store

Analisando a qualidade do código de aplicativos da Windows Store com a análise de código do Visual Studio