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:
- Visual Studio'daki Bulut Gezgini veya Azure portalı aracılığıyla App Service'inizi kapatın.
- App Service'inizin Kudu sitesine (yani uygulama hizmetinize) gidin.scm.azurewebsites.net) ve Site uzantıları'na gidin.
- 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:
- App Service'iniz için Azure portalı aracılığıyla Uzaktan Hata Ayıklayıcı uzantısını devre dışı bırakın.
- Azure portalında > Application Service kaynak dikey pencereniz >Uygulama Ayarları
- Hata Ayıklama bölümüne gidin ve Uzaktan hata ayıklama için Kapalı düğmesine tıklayın.
AKS için:
- 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.
- 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:
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.
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
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:
App Service'iniz için Azure portalı aracılığıyla Snapshot Debugger'ı devre dışı bırakın.
Azure portalında > Application Service kaynak dikey pencereniz >Uygulama Ayarları
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:
- 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.
- 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
Ayrıca bkz.
- Visual Studio’da hata ayıklama
- Snapshot Debugger kullanarak canlı ASP.NET uygulamalarında hata ayıklama
- Snapshot Debugger kullanarak Azure Sanal Makineler\Sanal Makineler ölçek kümeleri ASP.NET canlı hata ayıklama
- Snapshot Debugger kullanarak Azure Kubernetes ASP.NET canlı hata ayıklama
- Anlık görüntü hata ayıklama için sorun giderme ve bilinen sorunlar