Depurar aplicativos ASP.NET dinâmicos em máquinas virtuais do Azure e conjuntos de dimensionamento de máquinas virtuais do Azure 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 para Máquinas Virtuais (VM) do Azure e Conjuntos de Dimensionamento de Máquinas Virtuais só está disponível para Visual Studio 2019 Enterprise ou posterior, 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 Enterprise 2019.

  • A coleção de instantâneos está disponível para os seguintes aplicativos Web do Azure Máquinas Virtuais\Conjuntos de Dimensionamento de Máquinas Virtuais:

    • 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.

    Observação

    Visual Studio Enterprise em execução no Windows de 32 bits não poderá exibir instantâneos.

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 conjunto de dimensionamento de máquinas virtuais do Azue.

  2. Escolha Depurar e Anexar Depurador de Instantâneo.... Selecione a Máquina Virtual do Azure\Conjunto de Dimensionamento de Máquinas Virtuais em que seu aplicativo Web está implantado e uma conta de armazenamento do Azure e clique em Anexar. O Depurador de Instantâneos também dá suporte a Serviço de Kubernetes do Azure e Serviço de Aplicativo do Azure.

    Launch the snapshot debugger from the Debug menu

    Select Azure Resource

    Importante

    Na primeira vez que você selecionar Anexar Depurador de Instantâneos para sua VM, o IIS será reiniciado automaticamente. A primeira vez que você selecionar Anexar Depurador de Instantâneos para sua Conjuntos de Dimensionamento de Máquinas Virtuais, requer a atualização manual de cada instância do Conjuntos de Dimensionamento de Máquinas Virtuais.

    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.

    Os metadados para os Módulos não serão ativados inicialmente; navegue até o aplicativo Web, e o botão Iniciar Coleção ficará ativo. O Visual Studio agora está no modo de depuração de instantâneos.

    Snapshot debugging mode

    Observação

    Nos VMSS, o usuário precisará atualizar manualmente as instâncias em seus Conjuntos de Dimensionamento de Máquinas Virtuais depois de anexar o Depurador de Instantâneos pela primeira vez.

    A janela Módulos mostra quando todos os módulos de foram carregados para a máquina virtual do Azure/Conjunto de dimensionamento de máquinas virtuais (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 Máquinas Virtuais e Conjuntos de Dimensionamento de Máquinas Virtuais do Azure. Talvez você queira ler mais detalhes sobre esse recurso.