Często zadawane pytania dotyczące debugowania migawek w programie Visual Studio

Oto lista pytań, które mogą pojawić się podczas debugowania na żywo aplikacji platformy Azure przy użyciu narzędzia Snapshot Debugger.

Jaki jest koszt wydajności tworzenia migawki?

Gdy narzędzie Snapshot Debugger przechwytuje migawkę aplikacji, tworzy rozwidlenie procesu aplikacji i zawiesza rozwidlenie kopii. Podczas debugowania migawki debugujesz kopię rozwidlenia procesu. Ten proces trwa tylko 10–20 milisekund, ale nie kopiuje pełnej sterty aplikacji. Zamiast tego kopiuje tylko tabelę stron i ustawia strony do skopiowania na zapis. Jeśli niektóre obiekty aplikacji na stercie zmienią się, zostaną następnie skopiowane odpowiednie strony. Dlatego każda migawka ma niewielki koszt w pamięci (w kolejności setek kilobajtów dla większości aplikacji).

Co się stanie, jeśli mam skalowaną w poziomie usługę Azure App Service (wiele wystąpień mojej aplikacji)?

Jeśli masz wiele wystąpień aplikacji, punkty przyciągania są stosowane do każdego pojedynczego wystąpienia. Tylko pierwszy punkt przyciągania trafiony przy użyciu określonych warunków tworzy migawkę. Jeśli masz wiele punktów przyciągania, późniejsze migawki pochodzą z tego samego wystąpienia, które utworzyło pierwszą migawkę. Punkty dziennika wysyłane do okna danych wyjściowych będą wyświetlać tylko komunikaty z jednego wystąpienia, podczas gdy punkty dziennika wysyłane do dzienników aplikacji wysyłają komunikaty z każdego wystąpienia.

W jaki sposób debuger migawek ładuje symbole?

Debuger migawek wymaga dopasowania symboli dla aplikacji lokalnej lub wdrożonej w usłudze Azure App Service. (Osadzone pliki PDB nie są obecnie obsługiwane). Debuger migawek automatycznie pobiera symbole z usługi Azure App Service. Począwszy od programu Visual Studio 2017 w wersji 15.2, wdrażanie w usłudze Azure App Service również wdraża symbole aplikacji.

Czy debuger migawek działa w przypadku kompilacji wydania mojej aplikacji?

Tak — debuger migawek jest przeznaczony do pracy z kompilacjami wydań. Gdy punkt przyciągania zostanie umieszczony w funkcji, funkcja zostanie ponownie skompilowana z powrotem do wersji debugowania, dzięki czemu będzie można ją debugować. Zatrzymanie debugera migawki zwraca funkcje do wersji kompilacji wydania.

Czy punkty dziennika mogą powodować skutki uboczne w mojej aplikacji produkcyjnej?

Nie — wszystkie komunikaty dziennika dodawane do aplikacji są oceniane praktycznie. Nie mogą powodować żadnych skutków ubocznych w aplikacji. Jednak niektóre właściwości natywne mogą nie być dostępne z punktami dziennika.

Czy debuger migawki działa, jeśli mój serwer jest obciążony?

Tak, debugowanie migawek może działać w przypadku serwerów pod obciążeniem. Ograniczanie migawek debugera i nie przechwytuje migawek w sytuacjach, w których na serwerze jest mało wolnej pamięci.

Jak odinstalować debuger migawek?

Rozszerzenie witryny Snapshot Debugger można odinstalować w usłudze App Service, wykonując następujące kroki:

  1. Wyłącz usługę App Service za pośrednictwem Eksploratora chmury w programie Visual Studio lub w witrynie Azure Portal.
  2. Przejdź do witryny Kudu usługi App Service (czyli twojej aplikacji).scm.azurewebsites.net) i przejdź do pozycji Rozszerzenia witryny.
  3. Kliknij przycisk X w rozszerzeniu lokacji Snapshot Debugger, aby go usunąć.

Dlaczego porty są otwierane podczas sesji debugera migawek?

Debuger migawek musi otworzyć zestaw portów w celu debugowania migawek wykonanych na platformie Azure. Są to te same porty wymagane do zdalnego debugowania. Listę portów można znaleźć tutaj.

Jak wyłączyć rozszerzenie debugera zdalnego?

W przypadku usługi App Services:

  1. Wyłącz rozszerzenie zdalnego debugera za pośrednictwem witryny Azure Portal dla usługi App Service.
  2. Witryna Azure Portal > — ustawienia aplikacji bloku >aplikacji usługi Application Service
  3. Przejdź do sekcji Debugowanie i kliknij przycisk Wył. w obszarze Debugowanie zdalne.

W przypadku usługi AKS:

  1. Zaktualizuj plik Dockerfile, aby usunąć sekcje odpowiadające debugerowi migawki programu Visual Studio na obrazach platformy Docker.
  2. Skompiluj i ponownie wdróż zmodyfikowany obraz platformy Docker.

W przypadku zestawów skalowania maszyn wirtualnych/maszyn wirtualnych usuń rozszerzenie Remote Debugger, Certificates, KeyVaults i InBound NAT pools w następujący sposób:

  1. Usuwanie rozszerzenia debugera zdalnego

    Istnieje kilka sposobów wyłączania debugera zdalnego dla maszyn wirtualnych i zestawów skalowania maszyn wirtualnych:

    • Wyłączanie debugera zdalnego za pomocą Eksploratora chmury

      • Cloud Explorer > zasób > maszyny wirtualnej Wyłącz debugowanie (wyłączenie debugowania nie istnieje dla zestawu skalowania maszyn wirtualnych w Eksploratorze chmury).
    • Wyłączanie debugera zdalnego za pomocą skryptów/poleceń cmdlet programu PowerShell

      Dla maszyny wirtualnej:

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

      W przypadku zestawów skalowania maszyn wirtualnych:

      $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
      
    • Wyłączanie debugera zdalnego za pośrednictwem witryny Azure Portal

      • Witryna Azure Portal > — rozszerzenia bloku > zasobów maszyny wirtualnej/zestawów skalowania maszyn wirtualnych
      • Odinstaluj rozszerzenie Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger

      Uwaga

      Zestawy skalowania maszyn wirtualnych — portal nie zezwala na usuwanie portów DebuggerListener. Musisz użyć programu Azure PowerShell. Aby uzyskać szczegółowe informacje, zobacz poniżej.

  2. Usuwanie certyfikatów i usługi Azure KeyVault

    Podczas instalowania rozszerzenia Remote Debugger dla maszyn wirtualnych lub zestawów skalowania maszyn wirtualnych tworzone są zarówno certyfikaty klienta, jak i serwera w celu uwierzytelniania klienta programu Visual Studio za pomocą zasobów zestawów skalowania maszyn wirtualnych/maszyn wirtualnych platformy Azure.

    • Certyfikat klienta

      Ten certyfikat jest certyfikatem z podpisem własnym znajdującym się w folderze Cert:/CurrentUser/My/

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

      Jednym ze sposobów usunięcia tego certyfikatu z maszyny jest użycie programu PowerShell

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

      • Odpowiedni odcisk palca certyfikatu serwera jest wdrażany jako wpis tajny w usłudze Azure KeyVault. Program Visual Studio podejmie próbę znalezienia lub utworzenia magazynu kluczy z prefiksem MSVSAZ* w regionie odpowiadającym zasobowi maszyny wirtualnej lub zestawów skalowania maszyn wirtualnych. Wszystkie zasoby maszyn wirtualnych lub zestawów skalowania maszyn wirtualnych wdrożone w tym regionie będą więc współużytkować tę samą usługę KeyVault.
      • Aby usunąć wpis tajny odcisku palca certyfikatu serwera, przejdź do witryny Azure Portal i znajdź program MSVSAZ* KeyVault w tym samym regionie hostujący zasób. Usuń wpis tajny, który powinien być oznaczony etykietą remotedebugcert<<ResourceName>>
      • Należy również usunąć wpis tajny serwera z zasobu za pomocą programu PowerShell.

      W przypadku maszyn wirtualnych:

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

      W przypadku zestawów skalowania maszyn wirtualnych:

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Usuń wszystkie pule translatora adresów sieciowych DebuggerListener (tylko zestaw skalowania maszyn wirtualnych)

    Remote Debugger wprowadza debugerListener w powiązanych pulach NAT, które są stosowane do modułu równoważenia obciążenia zestawu skalowania.

    $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 wyłączyć debuger migawek?

W przypadku usługi App Service:

  1. Wyłącz debuger migawek za pośrednictwem witryny Azure Portal dla usługi App Service.

  2. Witryna Azure Portal > — ustawienia aplikacji bloku >aplikacji usługi Application Service

  3. Usuń następujące ustawienia aplikacji w witrynie Azure Portal i zapisz zmiany.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Ostrzeżenie

    Wszelkie zmiany w ustawieniach aplikacji zainicjują ponowne uruchomienie aplikacji. Aby uzyskać więcej informacji na temat ustawień aplikacji, zobacz Konfigurowanie aplikacji usługi App Service w witrynie Azure Portal.

W przypadku usługi AKS:

  1. Zaktualizuj plik Dockerfile, aby usunąć sekcje odpowiadające debugerowi migawki programu Visual Studio na obrazach platformy Docker.
  2. Skompiluj i ponownie wdróż zmodyfikowany obraz platformy Docker.

W przypadku zestawów skalowania maszyn wirtualnych/maszyn wirtualnych:

Istnieje kilka sposobów wyłączania debugera migawek:

  • Cloud Explorer > — maszyna wirtualna/zasób > zestawu skalowania maszyn wirtualnych Wyłącz diagnostykę

  • Witryna Azure Portal > — blok > zasobów zestawu skalowania maszyn wirtualnych/zestawów > skalowania odinstaluj rozszerzenie Microsoft.Insights.VMDiagnosticsSettings

  • Polecenia cmdlet programu PowerShell z modułu Az programu PowerShell

    Maszyna wirtualna:

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

    Zestawy skalowania maszyn wirtualnych:

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