Visual Studio'da anlık görüntü hata ayıklama için Sık Sorulan Sorular

Anlık Görüntü Hata Ayıklayıcısı'nı kullanarak canlı Azure uygulamalarında hata ayıklarken ortaya çıkabilecek soruların listesi aşağıdadır.

Anlık görüntü almanın performans maliyeti nedir?

Snapshot Debugger uygulamanızın anlık görüntüsünü yakaladığında, uygulamanın işlemini çatallar ve çatallanmış kopyayı askıya alır. Bir anlık görüntüde hata ayıkladığınızda, işlemin çatallanmış kopyasında hata ayıklarsınız. Bu işlem yalnızca 10-20 milisaniye sürer, ancak uygulamanın tam yığınını kopyalamaz. Bunun yerine, yalnızca sayfa tablosunu kopyalar ve sayfaları yazmada kopyalanacak şekilde ayarlar. Uygulamanızın yığındaki nesnelerinden bazıları değişirse ilgili sayfaları kopyalanır. Bu nedenle her anlık görüntünün küçük bir bellek içi maliyeti vardır (çoğu uygulama için yüzlerce kilobayt sırasına göre).

Ölçeği genişletilmiş bir Azure App Service'im (uygulamamın birden çok örneği) varsa ne olur?

Uygulamanızın birden çok örneğine sahip olduğunuzda, tutturma noktaları her bir örneğe uygulanır. Yalnızca belirtilen koşullarla isabet eden ilk tutturma noktası bir anlık görüntü oluşturur. Birden çok snappoint'iniz varsa, sonraki anlık görüntüler ilk anlık görüntüyü oluşturan örnekten gelir. Çıkış penceresine gönderilen günlük noktaları yalnızca bir örnekten gelen iletileri gösterirken, uygulama günlüklerine gönderilen günlük noktaları her örnekten ileti gönderir.

Snapshot Debugger sembolleri nasıl yükler?

Snapshot Debugger, uygulamanız için yerel veya Azure App Service'inize dağıtılan eşleşen sembollere sahip olmanız gerekir. (Eklenmiş PDB'ler şu anda desteklenmiyor.) Snapshot Debugger, Azure App Service'inizden simgeleri otomatik olarak indirir. Visual Studio 2017 sürüm 15.2'den başlayarak Azure App Service'e dağıtım yapmak, uygulamanızın simgelerini de dağıtır.

Snapshot Debugger, uygulamamın yayın derlemelerine karşı çalışıyor mu?

Evet - Snapshot Debugger sürüm derlemelerine karşı çalışacak şekilde tasarlanmıştır. Bir snappoint bir işleve yerleştirildiğinde, işlev hata ayıklama sürümüne geri derlenip hata ayıklanabilir hale gelir. Snapshot Debugger'ın durdurulması, işlevleri yayın derlemesinin sürümüne döndürür.

Günlük noktaları üretim uygulamamda yan etkilere neden olabilir mi?

Hayır- Uygulamanıza eklediğiniz tüm günlük iletileri sanal olarak değerlendirilir. Bunlar uygulamanızda herhangi bir yan etkiye neden olamaz. Ancak bazı yerel özelliklere günlük noktalarıyla erişilemiyor olabilir.

Sunucum yük altındaysa Snapshot Debugger çalışıyor mu?

Evet, yük altındaki sunucular için anlık görüntü hata ayıklaması çalışabilir. Snapshot Debugger, sunucunuzda düşük miktarda boş bellek bulunduğu durumlarda anlık görüntüleri kısıtlar ve yakalamaz.

Snapshot Debugger'ı nasıl kaldırırım?

Aşağıdaki adımlarla App Service'inizde Snapshot Debugger site uzantısını kaldırabilirsiniz:

  1. Visual Studio'daki Bulut Gezgini veya Azure portalı aracılığıyla App Service'inizi kapatın.
  2. App Service'inizin Kudu sitesine (yani uygulama hizmetinize) gidin.scm.azurewebsites.net) ve Site uzantıları'na gidin.
  3. Kaldırmak için Snapshot Debugger site uzantısında X işaretine tıklayın.

Anlık Görüntü Hata Ayıklayıcısı oturumu sırasında bağlantı noktaları neden açılır?

Snapshot Debugger'ın Azure'da alınan anlık görüntülerde hata ayıklamak için bir bağlantı noktası kümesi açması gerekir; bunlar uzaktan hata ayıklama için gereken bağlantı noktalarıyla aynıdır. Bağlantı noktalarının listesini burada bulabilirsiniz.

Uzaktan Hata Ayıklayıcı uzantısını nasıl devre dışı bırakmalıyım?

Uygulama Hizmetleri için:

  1. App Service'iniz için Azure portalı aracılığıyla Uzaktan Hata Ayıklayıcı uzantısını devre dışı bırakın.
  2. Azure portalında > Application Service kaynak dikey pencereniz >Uygulama Ayarları
  3. Hata Ayıklama bölümüne gidin ve Uzaktan hata ayıklama için Kapalı düğmesine tıklayın.

AKS için:

  1. Docker görüntülerinde Visual Studio Snapshot Debugger'a karşılık gelen bölümleri kaldırmak için Dockerfile'ınızı güncelleştirin.
  2. Değiştirilen Docker görüntüsünü yeniden oluşturun ve yeniden dağıtın.

Sanal makine/sanal makine ölçek kümeleri için, Uzaktan Hata Ayıklayıcı uzantısını, Sertifikalar, KeyVaults ve Gelen NAT havuzlarını aşağıdaki gibi kaldırın:

  1. Uzaktan Hata Ayıklayıcı uzantısını kaldırma

    Sanal makineler ve sanal makine ölçek kümeleri için Uzaktan Hata Ayıklayıcısı'nı devre dışı bırakmanın birkaç yolu vardır:

    • Bulut Gezgini aracılığıyla Uzaktan Hata Ayıklayıcıyı devre dışı bırakma

      • Bulut Gezgini > sanal makine kaynağınızda > Hata Ayıklamayı Devre Dışı Bırakma (Bulut Gezgini'nin sanal makine ölçek kümesi için Hata Ayıklamayı Devre Dışı Bırakma mevcut değildir).
    • PowerShell Betikleri/Cmdlet'leri ile Uzaktan Hata Ayıklayıcıyı Devre Dışı Bırakma

      Sanal makine için:

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

      Sanal makine ölçek kümeleri için:

      $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
      
    • Azure portalı aracılığıyla Uzaktan Hata Ayıklayıcıyı devre dışı bırakma

      • Azure portalı > sanal makineniz/sanal makine ölçek kümeleri kaynak dikey penceresi > Uzantıları
      • Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger uzantısını kaldırma

      Not

      Sanal makine ölçek kümeleri - Portal DebuggerListener bağlantı noktalarının kaldırılmasına izin vermiyor. Azure PowerShell kullanmanız gerekir. Ayrıntılar için aşağıya bakın.

  2. Sertifikaları ve Azure KeyVault'ı kaldırma

    Sanal makine veya sanal makine ölçek kümeleri için Uzaktan Hata Ayıklayıcı uzantısı yüklenirken, Visual Studio istemcisinin kimliğini Azure Sanal Makine/sanal makine ölçek kümeleri kaynaklarıyla doğrulamak için hem istemci hem de sunucu sertifikaları oluşturulur.

    • İstemci Sertifikası

      Bu sertifika, Cert:/CurrentUser/My/ konumunda bulunan otomatik olarak imzalanan bir sertifikadır

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

      Bu sertifikayı makinenizden kaldırmanın bir yolu PowerShell'dir

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

      • İlgili sunucu sertifikası parmak izi, Azure KeyVault'a gizli dizi olarak dağıtılır. Visual Studio, sanal makine veya sanal makine ölçek kümeleri kaynağına karşılık gelen bölgede MSVSAZ* ön ekine sahip bir KeyVault bulmaya veya oluşturmaya çalışır. Bu nedenle, bu bölgeye dağıtılan tüm sanal makine veya sanal makine ölçek kümeleri aynı KeyVault'ı paylaşır.
      • Sunucu sertifikası parmak izi gizli dizisini silmek için Azure portalına gidin ve MSVSAZ* KeyVault'u kaynağınızı barındıran bölgede bulun. Etiketlenmesi gereken gizli diziyi silme remotedebugcert<<ResourceName>>
      • Ayrıca powershell aracılığıyla kaynağınızdan sunucu gizli dizisini silmeniz gerekir.

      Sanal makineler için:

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

      Sanal makine ölçek kümeleri için:

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Tüm DebuggerListener Gelen NAT havuzlarını kaldırma (yalnızca sanal makine ölçek kümesi)

    Uzaktan Hata Ayıklayıcı, ölçek kümenizin yük dengeleyicisine uygulanan DebuggerListener bağlı NAT havuzlarını tanıtır.

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

Snapshot Debugger'ı nasıl devre dışı bırakmalıyım?

App Service için:

  1. App Service'iniz için Azure portalı aracılığıyla Snapshot Debugger'ı devre dışı bırakın.

  2. Azure portalında > Application Service kaynak dikey pencereniz >Uygulama Ayarları

  3. Azure portalında aşağıdaki Uygulama ayarlarını silin ve değişikliklerinizi kaydedin.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Uyarı

    Uygulama Ayarları'na yapılan tüm değişiklikler uygulamanın yeniden başlatılmasını başlatır. Uygulama Ayarları hakkında daha fazla bilgi için bkz . Azure portalında App Service uygulaması yapılandırma.

AKS için:

  1. Docker görüntülerinde Visual Studio Snapshot Debugger'a karşılık gelen bölümleri kaldırmak için Dockerfile'ınızı güncelleştirin.
  2. Değiştirilen Docker görüntüsünü yeniden oluşturun ve yeniden dağıtın.

Sanal makine/sanal makine ölçek kümeleri için:

Snapshot Debugger'ı devre dışı bırakmanın birkaç yolu vardır:

  • Bulut Gezgini > sanal makineniz/sanal makine ölçek kümesi kaynağınız > Tanılamayı Devre Dışı Bırak

  • Azure portalı > sanal makineniz/sanal makine ölçek kümesi kaynak dikey pencereniz > Uzantılar > Microsoft.Insights.VMDiagnosticsSettings uzantısını kaldırma

  • Az PowerShell'den PowerShell Cmdlet'leri

    Sanal makine:

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

    Sanal makine ölçek kümeleri:

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