Questions fréquentes sur le débogage d’instantané dans Visual Studio

Voici une liste de questions qui peuvent survenir lors du débogage d’applications Azure en production à l’aide du Débogueur de capture instantanée.

Quel est le coût en matière de performances de la prise d’un instantané ?

Lorsque le Débogueur de capture instantanée capture un instantané de votre application, il duplique (fork) le processu de l’application et interrompt la copie dupliquée. Lorsque vous déboguez un instantané, vous déboguez sur la copie dupliquée du processus. Ce processus ne prend que 10 à 20 millisecondes, mais ne copie pas le tas complet de l’application. À la place, il copie uniquement la table des pages et définit les pages sur « copie pour écriture ». Si certains des objets de votre application sur la pile changent, leurs pages correspondantes sont alors copiées. C’est pourquoi chaque capture instantanée a un petit coût en mémoire (de l’ordre de centaines de kilo-octets pour la plupart des applications).

Que se passe-t-il si j’ai un Azure App Service scaled-out (plusieurs instances de mon application) ?

Lorsque vous avez plusieurs instances de votre application, les snappoints sont appliqués à chaque instance unique. Seul le premier snappoint à atteindre les conditions spécifiées crée un instantané. Si vous avez plusieurs snappoints, les instantanés ultérieurs proviennent de l’instance qui a créé le premier instantané. Les logpoints envoyés à la fenêtre de sortie affichent uniquement les messages d’une instance, tandis que les logpoints envoyés aux journaux d’application envoient des messages à partir de chaque instance.

Comment le Débogueur de capture instantanée charge-t-il des symboles ?

Le Débogueur de capture instantanée nécessite que vous ayez les symboles correspondants pour votre application de manière locale ou déployée sur votre Azure App Service. (Les fichiers PDF incorporés ne sont actuellement pas pris en charge.) Le débogueur d’instantané télécharge automatiquement les symboles à partir de votre instance Azure App Service. À partir de Visual Studio 2017 version 15.2, le déploiement sur Azure App Service déploie également les symboles de votre application.

Le Débogueur de capture instantanée fonctionne-t-il avec les builds de publication de mon application ?

Oui. Le Débogueur de capture instantanée est prévu pour fonctionner sur les builds de publication. Lorsqu’un snappoint est placé dans une fonction, la fonction est recompilée dans une version de débogage, pour la rendre compatible avec le débogage. L’arrêt du Débogueur de capture instantanée restaure les fonctions sur la build de publication.

Les logpoints peuvent-ils provoquer des effets secondaires dans mon application de production ?

Non. Les messages de journal que vous ajoutez à votre application sont évalués de manière virtuelle. Ils ne peuvent pas causer d’effets secondaires dans votre application. Toutefois, certaines propriétés natives peuvent ne pas être accessibles avec les logpoints.

Le Débogueur de capture instantanée fonctionne-t-il si mon serveur est en charge ?

Oui, le débogage d’instantané peut fonctionner pour les serveurs en charge. Le Débogueur de capture instantanée limite et ne capture pas les instantanés en cas de faible quantité de mémoire disponible sur votre serveur.

Comment désinstaller le Débogueur de capture instantanée ?

Vous pouvez désinstaller l’extension de site du Débogueur de capture instantanée sur votre App Service en procédant comme suit :

  1. Désactivez votre App Service via Cloud Explorer dans Visual Studio ou le portail Azure.
  2. Accédez au site Kudu de votre App Service (autrement dit, yourappservice.scm.azurewebsites.net) et accédez à Extensions de site.
  3. Cliquez sur le X de l’extension de site du Débogueur de capture instantanée pour le supprimer.

Pourquoi les ports sont-ils ouverts pendant une session du Débogueur de capture instantanée ?

Le Débogueur de capture instantanée doit ouvrir un ensemble de ports pour déboguer les instantanés pris dans Azure, ce sont les mêmes ports requis pour le débogage distant. Vous trouverez la liste des ports ici.

Comment désactiver l’extension de débogueur distant ?

Pour App Services :

  1. Désactivez l’extension de débogueur distant via le portail Azure pour votre App Service.
  2. Portail Azure > le panneau de ressources de votre service d’application >Paramètres de l’application
  3. Accédez à la section Débogage, puis cliquez sur le bouton Désactiver pour le Débogage à distance.

Pour AKS :

  1. Mettez à jour votre fichier Dockerfile pour supprimer les sections correspondant au Débogueur d’instantané Visual Studio sur les images Docker.
  2. Regénérer et redéployer l’image Docker modifiée.

Pour les machines virtuelles/groupe de machines virtuelles identiques, supprimez l’extension du débogueur distant, les certificats, les coffres de clés et les pools NAT entrants comme suit :

  1. Supprimer l’extension du débogueur distant

    Il existe plusieurs façons de désactiver le débogueur distant pour les machines virtuelles et les groupes de machines virtuelles identiques :

    • Désactiver le débogueur distant via Cloud Explorer

      • Cloud Explorer > votre ressource de machine virtuelle> Désactive le débogage (la désactivation du débogage n’existe pas pour le groupe de machines virtuelles identiques sur Cloud Explorer).
    • Désactiver le débogueur distant avec des scripts/applets de commande PowerShell

      Pour la machine virtuelle :

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

      Pour les groupes de machines virtuelles identiques :

      $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
      
    • Désactiver le débogueur distant via le portail Azure

      • Portail Azure > Extensions de ressources de votre machine virtuelle/groupe de machines virtuelles identiques >
      • Désinstaller l’extension Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger

      Notes

      Groupes de machines virtuelles identiques - Le portail n’autorise pas la suppression des ports DebuggerListener. Vous devez utiliser Azure PowerShell. Voir les détails ci-dessous.

  2. Supprimer des certificats et Azure KeyVault

    Lors de l’installation de l’extension de débogueur distant pour les machines virtuelles ou groupes de machines virtuelles identiques, les certificats client et serveur sont créés pour authentifier le client Visual Studio avec les machines virtuelles Azure/ressources des groupes de machines virtuelles identiques.

    • Le certificat client

      Ce certificat est un certificat auto-signé situé dans Cert:/CurrentUser/My/

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

      Une façon de supprimer ce certificat de votre machine consiste à utiliser PowerShell

      $ResourceName = 'ResourceName' # from above
      Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Subject -match $ResourceName} | Remove-Item
      
    • Le certificat de serveur

      • L’empreinte numérique du certificat de serveur correspondante est déployée en tant que secret dans Azure KeyVault. Visual Studio tente de trouver ou de créer un coffre de clés avec le préfixe MSVSAZ* dans la région correspondant à la machine virtuelle ou la ressource de groupes de machines virtuelles identiques. Toutes les machines virtuelles ou ressources de groupes de machines virtuelles identiques déployées dans cette région partageront donc le même KeyVault.
      • Pour supprimer le secret de l’empreinte numérique du certificat de serveur, accédez au portail Azure et recherchez le KeyVault MSVSAZ* dans la même région que celle qui héberge votre ressource. Supprimer le secret qui doit être étiqueté remotedebugcert<<ResourceName>>
      • Vous devez également supprimer le secret du serveur de votre ressource via PowerShell.

      Pour les machines virtuelles :

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

      Pour les groupes de machines virtuelles identiques :

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Supprimez tous les pools NAT entrants DebuggerListener (groupe de machines virtuelles identiques uniquement)

    Le débogueur distant introduit DebuggerListener dans les pools NAT liés qui sont appliqués à l’équilibreur de charge de votre groupe de mise à l’échelle.

    $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
    }
    

Comment désactiver le débogueur d’instantané ?

Pour App Service :

  1. Désactivez le débogueur d’instantané via le portail Azure pour votre App Service.

  2. Portail Azure > le panneau de ressources de votre service d’application >Paramètres de l’application

  3. Supprimez les paramètres d’application suivants dans le portail Azure et enregistrez vos modifications.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Avertissement

    Toutes les modifications apportées aux paramètres d’application lancent un redémarrage de l’application. Pour plus d’informations sur les paramètres d’application, consultez Configurer une application App Service dans le portail Azure.

Pour AKS :

  1. Mettez à jour votre fichier Dockerfile pour supprimer les sections correspondant au Débogueur d’instantané Visual Studio sur les images Docker.
  2. Regénérer et redéployer l’image Docker modifiée.

Pour les machines virtuelles/groupes de machines virtuelles identiques :

Il existe plusieurs façons de désactiver le débogueur d’instantané :

  • Cloud Explorer > votre machine virtuelle/ressource de groupe de machines virtuelles identiques > Désactiver les diagnostics

  • Portail Azure > votre machine virtuelle/volet de ressource de groupe de machines virtuelles identiques > Extensions > Désinstaller l’extension Microsoft.Insights.VMDiagnosticsSettings

  • Applets de commande PowerShell à partir d’Az PowerShell

    Machine virtuelle :

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

    Groupes de machines virtuelles identiques :

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