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 :
- Désactivez votre App Service via Cloud Explorer dans Visual Studio ou le portail Azure.
- Accédez au site Kudu de votre App Service (autrement dit, yourappservice.scm.azurewebsites.net) et accédez à Extensions de site.
- 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 :
- Désactivez l’extension de débogueur distant via le portail Azure pour votre App Service.
- Portail Azure > le panneau de ressources de votre service d’application >Paramètres de l’application
- Accédez à la section Débogage, puis cliquez sur le bouton Désactiver pour le Débogage à distance.
Pour AKS :
- Mettez à jour votre fichier Dockerfile pour supprimer les sections correspondant au Débogueur d’instantané Visual Studio sur les images Docker.
- 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 :
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.
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
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 :
Désactivez le débogueur d’instantané via le portail Azure pour votre App Service.
Portail Azure > le panneau de ressources de votre service d’application >Paramètres de l’application
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 :
- Mettez à jour votre fichier Dockerfile pour supprimer les sections correspondant au Débogueur d’instantané Visual Studio sur les images Docker.
- 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
Voir aussi
- Débogage dans Visual Studio
- Déboguer des applications ASP.NET en production avec le Débogueur de capture instantanée
- Déboguer des Machines virtuelles/groupes de machines virtuelles identiques Azure ASP.NET en production avec le Débogueur de capture instantanée
- Déboguer Azure Kubernetes ASP.NET en production avec le Débogueur de capture instantanée
- Résolution des problèmes et problèmes connus du débogage d’instantané