Depurar aplicativos do Azure ASP.NET dinâmicos usando o Depurador de Instantâneos

O Depurador de Instantâneos tira um instantâneo de seus aplicativos em produção quando o código no qual você está interessado é executado. Para instruir o depurador a tirar um instantâneo, defina snappoints e logpoints em seu código. O depurador permite ver exatamente o que deu errado sem afetar o tráfego do seu aplicativo de produção. O Depurador de Instantâneo pode ajudar a reduzir drasticamente o tempo que leva para resolver problemas que ocorrem em ambientes de produção.

Snappoints e logpoints são semelhantes aos pontos de interrupção. Porém, ao contrário dos pontos de interrupção, os snappoints não interrompem o aplicativo quando atingidos. Normalmente, a captura de um instantâneo em um snappoint leva 10 a 20 milissegundos.

Neste tutorial, você irá:

  • Iniciar o Depurador de Instantâneos
  • Definir um snappoint e exibir um instantâneo
  • Definir um logpoint

Pré-requisitos

  • O Depurador de Instantâneos só está disponível começando na versão 15.5 do Visual Studio 2017 Enterprise, com a carga de trabalho de desenvolvimento do Azure. (Na guia Componentes individuais,é possível encontrá-lo em Depuração e testes>Depurador de instantâneos).

    Se ainda não estiver instalado, instale o Visual Studio 2019. Se estiver atualizando de uma instalação anterior do Visual Studio, execute o Instalador do Visual Studio e verifique o componente do Depurador de Instantâneos na carga de trabalho de desenvolvimento Web e do ASP.NET.

  • Plano de Serviço de Aplicativo do Azure básico ou avançado.

  • A coleção de instantâneos está disponível para os seguintes aplicativos Web em execução no Serviço de Aplicativo do Azure:

    • Aplicativos ASP.NET em execução no .NET Framework 4.6.1 ou posterior.
    • Aplicativos ASP.NET Core em execução no .NET Core 2.0 ou posterior no Windows.

Abra seu projeto e iniciar o Depurador de Instantâneos

  1. Abra o projeto em que você gostaria de fazer a depuração de instantâneos.

    Importante

    Para realizar a depuração de instantâneos, você precisará abrir a mesma versão do código-fonte publicado no seu Serviço de Aplicativo do Azure.

  2. Escolha Depurar > Anexar o Depurador de Instantâneos.... Selecione o Serviço de Aplicativo do Azure em que o projeto está implantado e uma conta de armazenamento do Azure e, em seguida, clique em Anexar. O Depurador de Instantâneos também dá suporte ao Serviço de Kubernetes do Azure e a VMs (Máquinas Virtuais) e Conjuntos de Dimensionamento de Máquinas Virtuais do Azure.

    Launch the snapshot debugger from the Debug menu

    Select Azure Resource

    Importante

    Na primeira vez que você selecionar Anexar o Depurador de Instantâneos, será solicitado a instalar a extensão de site do Depurador de Instantâneos em seu Serviço de Aplicativo do Azure. Essa instalação requer uma reinicialização do Serviço de Aplicativo do Azure.

    Observação

    (Visual Studio 2019 versão 16.2 e superior) O Depurador de Instantâneos habilitou o suporte à nuvem do Azure. Verifique se o recurso do Azure e a conta de Armazenamento do Microsoft Azure selecionada estão na mesma nuvem. Entre em contato com o administrador do Azure se você tiver dúvidas sobre as configurações de conformidade do Azure de sua empresa.

    O Visual Studio agora está no modo de depuração de instantâneos. Snapshot debugging mode

    A janela Módulos mostra quando todos os módulos foram carregados no Serviço de Aplicativo do Azure (escolha Depurar > Windows > Módulos para abrir essa janela).

    Check the Modules window

Definir um snappoint

  1. No editor de código, clique na medianiz esquerda ao lado de uma linha de código de seu interesse para definir um snappoint. Verifique se esse é o código que você sabe que será executado.

    Set a snappoint

  2. Clique em Iniciar Coleção para ativar o snappoint.

    Turn on the snappoint

    Dica

    Não é possível depurar ao exibir um instantâneo, mas você pode colocar vários snappoints em seu código para seguir a execução em diferentes linhas de código. Se você tiver vários snappoints em seu código, o Depurador de Instantâneos garantirá que os instantâneos correspondentes sejam da mesma sessão do usuário final. O Depurador de Instantâneos fará isso mesmo se houver muitos usuários acessando seu aplicativo.

Tirar um instantâneo

Após um snappoint ser definido, você pode gerar manualmente um instantâneo acessando a exibição do navegador de seu site e executando a linha de código marcada ou aguardando que os usuários gerem um a partir do uso do site.

Inspecionar dados de instantâneo

  1. Quando o snappoint for atingido, um instantâneo será exibido na janela de Ferramentas de Diagnóstico. Para abrir essa janela, escolha Depurar > Janelas > Mostrar Ferramentas de Diagnóstico.

    Open a snappoint

  2. Clique duas vezes o snappoint para abrir o instantâneo no editor de códigos.

    Inspect snapshot data

    Nessa exibição, você pode passar o mouse sobre as variáveis para exibir DataTips; use as janelas Locais, Inspeções e Pilha de Chamadas e também avalie expressões.

    O site em si ainda fica ativo, e os usuários finais não são afetados. Apenas um instantâneo é capturado por snappoint por padrão: após a captura de um instantâneo, o snappoint é desativado. Se você quiser capturar outro instantâneo no snappoint, poderá ativar o snappoint novamente clicando em Atualizar Coleção.

Você também pode adicionar mais snappoints ao seu aplicativo e ativá-los com o botão Atualizar Coleção.

Precisa de ajuda? Consulte as páginas Solução de problemas e problemas conhecidos e Perguntas frequentes sobre depuração de instantâneo.

Definir um snappoint condicional

Se tiver dificuldades para recriar um estado específico no aplicativo, considere usar um snappoint condicional. Os snappoints condicionais ajudam a controlar quando fazer um instantâneo, por exemplo, quando uma variável contém um valor específico que você deseja inspecionar. É possível definir condições usando expressões, filtros ou contagens de ocorrências.

Para criar um snappoint condicional

  1. Clique com o botão direito do mouse em um ícone de snappoint (a esfera vazada) e escolha Configurações.

    Choose Settings

  2. Na janela de configurações de snappoint, digite uma expressão.

    Type an expression

    Na ilustração anterior, o instantâneo é criado para o snappoint somente quando visitor.FirstName == "Dan".

Definir um logpoint

Além de tirar um instantâneo quando um snappoint é atingido, também é possível configurar um snappoint para registrar uma mensagem em log (ou seja, criar um logpoint). Você pode definir logpoints sem a necessidade de reimplantar o aplicativo. Logpoints são executados virtualmente e não causam impacto ou efeitos colaterais ao seu aplicativo em execução.

Para criar um logpoint

  1. Clique com o botão direito em um ícone de snappoint (o hexágono azul) e escolha Configurações.

  2. Na janela de configurações de snappoint, selecione Ações.

    Create a logpoint

  3. No campo Mensagem, você pode inserir a nova mensagem de log para registrar em log. Você também pode avaliar variáveis na sua mensagem de log colocando-as entre chaves.

    Se você escolher Enviar para a Janela de Saída, quando o logpoint for atingido, a mensagem será exibida na janela de Ferramentas de Diagnóstico.

    Logpoint data in the Diagnostic Tools window

    Se você escolher Enviar para log do aplicativo, quando o logpoint for atingido, a mensagem será exibida em qualquer lugar em que você possa ver mensagens de System.Diagnostics.Trace (ou ILogger no .NET Core), como App Insights.

Neste tutorial, você aprendeu como usar o Depurador de Instantâneos para Serviços de Aplicativos. Talvez você queira ler mais detalhes sobre esse recurso.