Upravit

Sdílet prostřednictvím


Nejčastější dotazy k ladění snímků v sadě Visual Studio

Tady je seznam otázek, které můžou nastat při ladění živých aplikací Azure pomocí ladicího programu Snapshot Debugger.

Jaké jsou náklady na výkon pořízení snímku?

Když Snapshot Debugger zachytí snímek aplikace, vytvoří fork procesu aplikace a pozastaví rozvětvovanou kopii. Při ladění snímku ladíte proti rozvětvované kopii procesu. Tento proces trvá jenom 10 až 20 milisekund, ale nekopíroval celou haldu aplikace. Místo toho zkopíruje pouze stránkovací tabulku a nastaví stránky pro kopírování při zápisu. Pokud se některé objekty vaší aplikace na haldě změní, zkopírují se příslušné stránky. Proto má každý snímek malé náklady na paměť (v pořadí stovek kilobajtů pro většinu aplikací).

Co se stane, když mám škálovanou službu Azure App Service (více instancí aplikace)?

Pokud máte více instancí aplikace, použijí se na každou instanci snappointy. Snímek se vytvoří pouze první bod snappointu, který se dosáhne zadanými podmínkami. Pokud máte více snímků, pozdější snímky pocházejí ze stejné instance, která vytvořila první snímek. Protokolové body odeslané do výstupního okna budou zobrazovat pouze zprávy z jedné instance, zatímco protokolové body odeslané do protokolů aplikace odesílají zprávy z každé instance.

Jak snapshot Debugger načítá symboly?

Snapshot Debugger vyžaduje, abyste měli odpovídající symboly pro vaši aplikaci buď místní, nebo nasazené ve službě Azure App Service. (Vložené soubory PDB se v současné době nepodporují.) Snapshot Debugger automaticky stáhne symboly z vaší služby Azure App Service. Počínaje sadou Visual Studio 2017 verze 15.2 nasadíte do služby Azure App Service také symboly vaší aplikace.

Funguje snapshot Debugger s buildy vydané verze aplikace?

Ano – Snapshot Debugger je určený pro práci s buildy vydaných verzí. Když je do funkce umístěn snappoint, funkce se znovu zkompiluje zpět do ladicí verze, aby ji bylo možné ladit. Zastavení snapshot Debuggeru vrátí funkce do verze sestavení vydané verze.

Můžou protokolovací body způsobit vedlejší účinky v produkční aplikaci?

Ne – všechny zprávy protokolu, které do aplikace přidáte, se vyhodnocují prakticky. Nemůžou ve vaší aplikaci způsobit žádné vedlejší účinky. Některé nativní vlastnosti však nemusí být přístupné s protokolovými body.

Funguje ladicí program snapshotu, pokud je server zatížený?

Ano, ladění snímků může fungovat pro servery, které jsou zatížené. Snapshot Debugger omezuje snímky a nezachytává snímky v situacích, kdy je na vašem serveru málo volné paměti.

Jak můžu odinstalovat Snapshot Debugger?

Rozšíření webu Snapshot Debugger ve službě App Service můžete odinstalovat pomocí následujících kroků:

  1. Vypněte službu App Service prostřednictvím Průzkumníka cloudu v sadě Visual Studio nebo webu Azure Portal.
  2. Přejděte na web Kudu vaší služby App Service (to znamená vašeappservice).scm.azurewebsites.net) a přejděte na rozšíření webu.
  3. Kliknutím na X v rozšíření webu Snapshot Debugger ho odeberte.

Proč jsou porty otevřené během relace snapshot debuggeru?

Snapshot Debugger potřebuje otevřít sadu portů, aby bylo možné ladit snímky pořízené v Azure, jedná se o stejné porty potřebné pro vzdálené ladění. Seznam portů najdete tady.

Jak zakážem rozšíření vzdáleného ladicího programu?

Pro App Services:

  1. Zakažte rozšíření vzdáleného ladicího programu prostřednictvím webu Azure Portal pro vaši službu App Service.
  2. Azure Portal > – Nastavení aplikace v okně >Prostředek služby Application Service
  3. Přejděte do části Ladění a klikněte na tlačítko Vypnuto pro vzdálené ladění.

Pro AKS:

  1. Aktualizujte soubor Dockerfile tak, aby se odebraly oddíly odpovídající sadě Visual Studio Snapshot Debugger v imagích Dockeru.
  2. Znovu sestavte a znovu nasaďte upravenou image Dockeru.

Pro škálovací sady virtuálních počítačů nebo virtuálních počítačů odeberte rozšíření vzdáleného ladicího programu, certifikáty, služby KeyVaults a fondy naT pro příchozí spojení následujícím způsobem:

  1. Odebrání rozšíření vzdáleného ladicího programu

    Vzdálený ladicí program pro virtuální počítače a škálovací sady virtuálních počítačů můžete zakázat několika způsoby:

    • Zakázání vzdáleného ladicího programu prostřednictvím Průzkumníka cloudu

      • Cloud Explorer > váš prostředek > virtuálního počítače Zakažte ladění (Zakázání ladění neexistuje pro škálovací sadu virtuálních počítačů v Průzkumníku cloudu).
    • Zakázání vzdáleného ladicího programu pomocí skriptů a rutin PowerShellu

      Pro virtuální počítač:

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

      Pro škálovací sady virtuálních počítačů:

      $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
      
    • Zakázání vzdáleného ladicího programu prostřednictvím webu Azure Portal

      • Rozšíření okna prostředků > škálovací sady virtuálních počítačů na webu Azure Portal >
      • Odinstalace rozšíření Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger

      Poznámka:

      Škálovací sady virtuálních počítačů – Portál nepovoluje odebrání portů DebuggerListener. Budete muset použít Azure PowerShell. Podrobnosti najdete níže.

  2. Odebrání certifikátů a služby Azure KeyVault

    Při instalaci rozšíření Vzdáleného ladicího programu pro virtuální počítač nebo škálovací sady virtuálních počítačů se vytvoří certifikát klienta klienta i serveru pro ověření klienta sady Visual Studio pomocí prostředků škálovacích sad virtuálních počítačů Nebo virtuálních počítačů Azure.

    • Klientský certifikát

      Tento certifikát je certifikát podepsaný svým držitelem umístěný v Cert:/CurrentUser/My/.

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

      Jedním ze způsobů, jak odebrat tento certifikát z počítače, je použití PowerShellu.

      $ResourceName = 'ResourceName' # from above
      Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object {$_.Subject -match $ResourceName} | Remove-Item
      
    • Certifikát serveru

      • Odpovídající kryptografický otisk certifikátu serveru se nasadí jako tajný klíč do služby Azure KeyVault. Visual Studio se pokusí najít nebo vytvořit službu KeyVault s předponou MSVSAZ* v oblasti odpovídající prostředku škálovacích sad virtuálních počítačů nebo virtuálních počítačů. Všechny prostředky škálovacích sad virtuálních počítačů nebo virtuálních počítačů nasazené do této oblasti proto budou sdílet stejnou službu KeyVault.
      • Pokud chcete odstranit tajný klíč kryptografického otisku certifikátu serveru, přejděte na web Azure Portal a vyhledejte keyVault MSVSAZ* ve stejné oblasti, která je hostitelem vašeho prostředku. Odstranění tajného kódu, který by měl být označený remotedebugcert<<ResourceName>>
      • Budete také muset odstranit tajný kód serveru z vašeho prostředku prostřednictvím PowerShellu.

      Pro virtuální počítače:

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

      Pro škálovací sady virtuálních počítačů:

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Odebrání všech fondů NaT třídy DebuggerListener (pouze škálovací sada virtuálních počítačů)

    Vzdálený ladicí program zavádí debuggerListener vázané fondy NAT, které se použijí na nástroj pro vyrovnávání zatížení škálovací sady.

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

Jak můžu zakázat Snapshot Debugger?

Pro App Service:

  1. Zakažte snapshot Debugger prostřednictvím webu Azure Portal pro vaši službu App Service.

  2. Azure Portal > – Nastavení aplikace v okně >Prostředek služby Application Service

  3. Na webu Azure Portal odstraňte následující nastavení aplikace a uložte provedené změny.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Upozorňující

    Všechny změny nastavení aplikace zahájí restartování aplikace. Další informace o nastavení aplikace najdete v tématu Konfigurace aplikace App Service na webu Azure Portal.

Pro AKS:

  1. Aktualizujte soubor Dockerfile tak, aby se odebraly oddíly odpovídající sadě Visual Studio Snapshot Debugger v imagích Dockeru.
  2. Znovu sestavte a znovu nasaďte upravenou image Dockeru.

Pro škálovací sady virtuálních počítačů nebo virtuálních počítačů:

Snapshot Debugger můžete zakázat několika způsoby:

  • Cloud Explorer > – virtuální počítač / prostředek > škálovací sady virtuálních počítačů – Zakázání diagnostiky

  • Azure Portal > – virtuální počítač / okno > prostředků škálovací sady virtuálních počítačů – Rozšíření > Odinstalace rozšíření Microsoft.Insights.VMDiagnosticsSettings

  • Rutiny PowerShellu z Az PowerShellu

    Virtuální počítač:

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

    Škálovací sady virtuálních počítačů:

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