Perguntas frequentes sobre depuração de instantâneo no Visual Studio

Veja a seguir uma lista de perguntas que podem surgir durante a depuração de aplicativos dinâmicos do Azure usando o Depurador de Instantâneos.

Qual é o custo de desempenho de capturar um instantâneo?

Quando o Depurador de Instantâneos captura um instantâneo do seu aplicativo, ele bifurca o processo do aplicativo e suspende a cópia bifurcada. Ao depurar um instantâneo, você o está depurando em relação à cópia bifurcada do processo. Esse processo leva apenas 10 a 20 milissegundos, mas não copia o heap completo do aplicativo. Em vez disso, copia apenas a tabela de página e define as páginas para cópia na gravação. Se algum dos objetos do seu aplicativo no heap for alterado, as respectivas páginas serão copiadas. É por isso que cada instantâneo tem um pequeno custo na memória (na ordem de centenas de kilobytes para a maioria dos aplicativos).

O que acontece se eu tiver um Serviço de Aplicativo do Azure expandido (várias instâncias do meu aplicativo)?

Quando você tiver várias instâncias do seu aplicativo, os snappoints serão aplicados a cada instância única. Somente o primeiro snappoint a atender às condições especificadas cria um instantâneo. Se você tiver vários snappoints, instantâneos posteriores serão provenientes da mesma instância que criou o primeiro instantâneo. Logpoints enviados para a janela de saída mostrarão apenas as mensagens de uma instância, enquanto logpoints enviados para os logs de aplicativo enviarão mensagens de todas as instâncias.

Como o Depurador de Instantâneos carrega símbolos?

O Depurador de Instantâneos requer que você tenha os símbolos correspondentes para seu aplicativo no local ou implantados no Serviço de Aplicativo do Azure. (Atualmente, não há suporte a PDBs inseridos.) O Depurador de Instantâneos baixa automaticamente símbolos do Serviço de Aplicativo do Azure. A partir do Visual Studio 2017 versão 15.2, a implantação no Serviço de Aplicativo do Azure também faz a implantação dos símbolos do seu aplicativo.

O Depurador de Instantâneos funciona em builds de versão do meu aplicativo?

Sim, o Depurador de Instantâneos deve funcionar em builds de versão. Quando um snappoint for colocado em uma função, a função será recompilada para uma versão de depuração, tornando-o depurável. A interrupção do Depurador de Instantâneos retorna funções para a versão do build de versão.

Os logpoints pode causar efeitos colaterais no meu aplicativo de produção?

Não. As mensagens de log que você adiciona ao seu aplicativo são avaliadas virtualmente. Elas não podem causar efeitos colaterais em seu aplicativo. No entanto, algumas propriedades nativas podem não ser acessíveis com logpoints.

O Depurador de Instantâneos funcionará se meu servidor estiver sob carga?

Sim, a depuração de instantâneos pode funcionar em servidores sob carga. O Depurador de Instantâneos faz a restrição e não captura instantâneos em situações em que há uma quantidade pequena de memória livre em seu servidor.

Como faço para desinstalar o Depurador de Instantâneos?

Você pode desinstalar a extensão de site do Depurador de Instantâneos no seu Serviço de Aplicativo com as seguintes etapas:

  1. Desative o Serviço de Aplicativo por meio do Cloud Explorer no Visual Studio ou no portal do Azure.
  2. Navegue até o site do Kudu do Serviço de Aplicativo (ou seja, seu serviçodeaplicativo.scm.azurewebsites.net) e vá até Extensões de Site.
  3. Clique no X na extensão de site do Depurador de Instantâneos para removê-lo.

Por que as portas ficam abertas durante uma sessão do Depurador de Instantâneos?

O Depurador de Instantâneos precisa abrir um conjunto de portas para depurar os instantâneos tirados no Azure. São as mesmas portas necessárias para depuração remota. Encontre a lista de portas aqui.

Como fazer para desabilitar a extensão Depurador Remoto?

Para os Serviços de Aplicativo:

  1. Desabilite a extensão Depurador Remoto por meio do portal do Azure para seu Serviço de Aplicativo.
  2. Portal do Azure > Folha de recursos do Serviço de Aplicativo>Configurações de Aplicativo
  3. Navegue até a seção Depuração e clique no botão Desativar para Depuração remota.

Para o AKS:

  1. Atualize o Dockerfile a fim de remover as seções correspondentes ao Depurador de Instantâneos do Visual Studio em imagens do Docker.
  2. Recompile e reimplante a imagem do Docker modificada.

Para máquinas virtuais/conjuntos de dimensionamento de máquinas virtuais, remova a extensão Depurador Remoto, os Certificados, os KeyVaults e os pools NAT de Entrada da seguinte maneira:

  1. Remover extensão Depurador Remoto

    Há várias maneiras de desabilitar o Depurador Remoto em máquinas virtuais e conjuntos de dimensionamento de máquinas virtuais:

    • Desabilitar o Depurador Remoto por meio do Cloud Explorer

      • Cloud Explorer > seu recurso de máquina virtual > Desabilitar Depuração (não existe opção de desabilitar a depuração do conjunto de dimensionamento de máquinas virtuais no Cloud Explorer).
    • Desabilitar o Depurador Remoto com scripts/cmdlets do PowerShell

      Para a máquina virtual:

      Remove-AzVMExtension -ResourceGroupName $rgName -VMName $vmName -Name Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger
      

      Para conjuntos de dimensionamento de máquinas virtuais:

      $vmss = Get-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName
      $extension = $vmss.VirtualMachineProfile.ExtensionProfile.Extensions | Where {$_.Name.StartsWith('VsDebuggerService')} | Select -ExpandProperty Name
      Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extension
      
    • Desabilitar o Depurador Remoto por meio do portal do Azure

      • Portal do Azure > folha de recursos de sua máquina virtual/conjuntos de dimensionamento de máquina virtual > Extensões
      • Desinstalar a extensão Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger

      Observação

      Conjuntos de dimensionamento de máquinas virtuais: o portal não permite a remoção das portas DebuggerListener. Você precisará usar o Azure PowerShell. Confira os detalhes abaixo.

  2. Remover certificados e Azure KeyVault

    Ao instalar a extensão Depurador Remoto em conjuntos de dimensionamento de máquinas virtuais ou máquinas virtuais, os certificados de cliente e servidor serão criados para autenticar o cliente do Visual Studio com os recursos de conjuntos de dimensionamento de máquinas virtuais/máquinas virtuais do Azure.

    • O Certificado do Cliente

      Esse certificado é um certificado autoassinado localizado em Cert:/CurrentUser/My/

      Thumbprint                                Subject
      ----------                                -------
      
      1234123412341234123412341234123412341234  CN=ResourceName
      

      Uma maneira de remover esse certificado do computador é por meio do PowerShell

      $ResourceName = 'ResourceName' # from above
      Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Subject -match $ResourceName} | Remove-Item
      
    • O certificado do servidor

      • A impressão digital do certificado do servidor correspondente é implantada como um segredo do Azure KeyVault. O Visual Studio tentará localizar ou criar um KeyVault com o prefixo MSVSAZ* na região correspondente ao recurso de conjuntos de dimensionamento de máquinas virtuais ou máquinas virtuais. Todos os recursos de conjuntos de dimensionamento de máquinas virtuais ou máquinas virtuais implantadas nessa região, portanto, compartilharão o mesmo KeyVault.
      • Para excluir o segredo da impressão digital do certificado do servidor, acesse o portal do Azure e localize o KeyVault MSVSAZ* na mesma região que hospeda o recurso. Excluir o segredo que deveria ter o rótulo remotedebugcert<<ResourceName>>
      • Você também precisará excluir o segredo do servidor do recurso por meio do PowerShell.

      Para máquinas virtuais:

      $vm.OSProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVM -ResourceGroupName $rgName -VM $vm
      

      Para conjuntos de dimensionamento de máquinas virtuais:

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Remover todos os pools NAT de Entrada de DebuggerListener (somente conjunto de dimensionamento de máquinas virtuais)

    O Depurador Remoto apresenta pools NAT associados ao DebuggerListener que são aplicados ao balanceador de carga do seu conjunto de dimensionamento.

    $inboundNatPools = $vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.IpConfigurations.LoadBalancerInboundNatPools
    $inboundNatPools.RemoveAll({ param($pool) $pool.Id.Contains('inboundNatPools/DebuggerListenerNatPool-') }) | Out-Null
    
    if ($LoadBalancerName)
    {
       $lb = Get-AzLoadBalancer -ResourceGroupName $ResourceGroup -name $LoadBalancerName
       $lb.FrontendIpConfigurations[0].InboundNatPools.RemoveAll({ param($pool) $pool.Id.Contains('inboundNatPools/DebuggerListenerNatPool-') }) | Out-Null
       Set-AzLoadBalancer -LoadBalancer $lb
    }
    

Como fazer para desabilitar o Depurador de Instantâneos?

Para o Serviço de Aplicativo:

  1. Desabilite o Depurador de Instantâneos por meio do portal do Azure para seu Serviço de Aplicativo.

  2. Portal do Azure > Folha de recursos do Serviço de Aplicativo>Configurações de Aplicativo

  3. Exclua as configurações de aplicativo a seguir no portal do Azure e salve suas alterações.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Aviso

    Qualquer alteração nas Configurações do Aplicativo iniciará uma reinicialização do aplicativo. Para obter mais informações sobre Configurações de Aplicativo, confira Configurar um aplicativo do Serviço de Aplicativo no portal do Azure.

Para o AKS:

  1. Atualize o Dockerfile a fim de remover as seções correspondentes ao Depurador de Instantâneos do Visual Studio em imagens do Docker.
  2. Recompile e reimplante a imagem do Docker modificada.

Para conjuntos de dimensionamento de máquinas virtuais/máquinas virtuais:

Há várias maneiras de desabilitar o Depurador de Instantâneos:

  • Cloud Explorer > seu recurso de conjunto de dimensionamento de máquinas virtuais/máquina virtual > Desabilitar Diagnóstico

  • Portal do Azure > folha de recursos de sua máquina virtual/conjunto de dimensionamento de máquinas virtuais > Extensões > Desinstalar a extensão Microsoft.Insights.VMDiagnosticsSettings

  • Cmdlets do PowerShell do Az PowerShell

    Máquina virtual:

        Remove-AzVMExtension -ResourceGroupName $rgName -VMName $vmName -Name Microsoft.Insights.VMDiagnosticsSettings
    

    Conjuntos de dimensionamento de máquinas virtuais:

        $vmss = Get-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName
        Remove-AzVmssExtension -VirtualMachineScaleSet $vmss -Name Microsoft.Insights.VMDiagnosticsSettings