Tanya Jawab Umum untuk debug snapshot di Visual Studio

Berikut adalah daftar pertanyaan yang mungkin muncul saat men-debug aplikasi Azure langsung dengan menggunakan Snapshot Debugger.

Berapa biaya performa mengambil snapshot?

Saat mengambil snapshot aplikasi Anda, Snapshot Debugger akan membuat fork proses aplikasi dan menangguhkan salinan yang di-fork. Saat men-debug snapshot, Anda men-debug salinan proses yang di-fork. Proses ini hanya membutuhkan waktu 10-20 milidetik tetapi tidak menyalin tumpukan penuh aplikasi. Sebaliknya, proses ini hanya menyalin tabel halaman dan mengatur halaman untuk disalin saat menulis. Jika beberapa objek aplikasi Anda pada tumpukan berubah, halaman masing-masing kemudian disalin. Itu sebabnya tiap snapshot memiliki biaya dalam memori yang kecil (berdasarkan urutan ratusan kilobyte untuk sebagian besar aplikasi).

Apa yang terjadi jika saya memiliki Azure App Service yang diluaskan skalanya (beberapa instans aplikasi saya)?

Saat Anda memiliki beberapa instans aplikasi, snappoint diterapkan ke setiap instans. Hanya snappoint pertama yang tercapai dengan kondisi yang ditentukan yang membuat snapshot. Jika Anda memiliki beberapa snappoint, snapshot selanjutnya berasal dari instans yang sama yang membuat snapshot pertama. Titik log yang dikirimkan ke jendela output hanya akan menampilkan pesan dari satu instans, sementara titik log yang dikirimkan ke log aplikasi mengirim pesan dari setiap instans.

Bagaimana Snapshot Debugger memuat simbol?

Snapshot Debugger mengharuskan Anda memiliki simbol yang cocok untuk aplikasi Anda baik lokal atau disebarkan ke Azure App Service Anda. (PDB tersemat saat ini tidak didukung.) Snapshot Debugger secara otomatis mengunduh simbol dari Azure App Service Anda. Dimulai dengan Visual Studio 2017 versi 15.2, menyebarkan ke Azure App Service juga akan menyebarkan simbol aplikasi Anda.

Apakah Snapshot Debugger berfungsi dengan build rilis aplikasi saya?

Ya - Snapshot Debugger dimaksudkan untuk berfungsi dengan build rilis. Saat snappoint ditempatkan dalam fungsi, fungsi dikompilasi ulang kembali ke versi debug, membuatnya dapat di-debug. Menghentikan Snapshot Debugger akan mengembalikan fungsi ke versi build rilis.

Dapatkah titik log menyebabkan efek samping dalam aplikasi produksi saya?

Tidak - pesan log apa pun yang Anda tambahkan ke aplikasi Anda dievaluasi secara virtual. Pesan log ini tidak dapat menyebabkan efek samping dalam aplikasi Anda. Akan tetapi, beberapa properti native mungkin tidak dapat diakses dengan titik log.

Apakah Snapshot Debugger berfungsi jika server saya dibebani?

Ya, debug snapshot dapat berfungsi untuk server yang dibebani. Snapshot Debugger membatasi dan tidak mengambil snapshot dalam situasi di mana ada jumlah memori kosong yang sedikit di server Anda.

Bagaimana cara mencopot pemasangan Snapshot Debugger?

Anda dapat mencopot pemasangan ekstensi situs Snapshot Debugger di App Service Anda dengan langkah-langkah berikut:

  1. Nonaktifkan App Service Anda baik melalui Cloud Explorer di Visual Studio atau portal Azure.
  2. Arahkan ke situs Kudu App Service Anda (yaitu, yourappservice.scm.azurewebsites.net) dan arahkan ke Site extensions.
  3. Klik X pada ekstensi situs Snapshot Debugger untuk menghapusnya.

Mengapa port dibuka selama sesi Snapshot Debugger?

Snapshot Debugger perlu membuka sekumpulan port untuk men-debug snapshot yang diambil di Azure, ini adalah port yang sama yang diperlukan untuk debug jarak jauh. Anda dapat menemukan daftar port di sini.

Bagaimana cara saya menonaktifkan ekstensi Debugger Jarak Jauh?

Untuk App Services:

  1. Nonaktifkan ekstensi Debugger Jarak Jauh melalui portal Azure untuk App Service Anda.
  2. Portal Azure > bilah sumber daya Layanan Aplikasi Anda >Pengaturan Aplikasi
  3. Arahkan ke bagian Debug dan klik tombol Nonaktif untuk Debug jarak jauh.

Untuk AKS:

  1. Perbarui Dockerfile Anda untuk menghapus bagian yang sesuai dengan Visual Studio Snapshot Debugger pada gambar Docker.
  2. Bangun ulang dan sebarkan ulang gambar Docker yang diubah.

Untuk mesin virtual/set skala mesin virtual, hapus ekstensi Debugger Jarak Jauh, Sertifikat, KeyVault, dan kumpulan NAT Masuk sebagai berikut:

  1. Menghapus ekstensi Debugger Jarak Jauh

    Ada beberapa cara untuk menonaktifkan Debugger Jarak Jauh untuk mesin virtual dan set skala mesin virtual:

    • Menonaktifkan Debugger Jarak Jauh melalui Cloud Explorer

      • Cloud Explorer > sumber daya mesin virtual Anda > Nonaktifkan Debug (Menonaktifkan Debug tidak ada untuk set skala mesin virtual di Cloud Explorer).
    • Menonaktifkan Debugger Jarak Jauh dengan PowerShell Scripts/Cmdlets

      Untuk mesin virtual:

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

      Rangkaian skala komputer virtual:

      $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
      
    • Menonaktifkan Debugger Jarak Jauh melalui portal Azure

      • Portal Azure > bilah sumber daya mesin virtual/set skala mesin virtual Anda> Ekstensi
      • Copot pemasangan ekstensi Microsoft.VisualStudio.Azure.RemoteDebug.VSRemoteDebugger

      Catatan

      Set skala mesin virtual - Portal tidak mengizinkan penghapusan port DebuggerListener. Anda harus menggunakan Azure PowerShell. Lihat di bawah untuk detailnya.

  2. Menghapus Sertifikat dan Azure KeyVault

    Saat memasang ekstensi Debugger Jarak Jauh untuk mesin virtual atau set skala mesin virtual, sertifikat klien dan server dibuat untuk mengautentikasi klien Visual Studio dengan sumber daya Mesin Virtual/set skala mesin virtual Azure.

    • Sertifikat Klien

      Sertifikat ini adalah sertifikat yang ditandatangani sendiri yang berada di Cert:/CurrentUser/My/

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

      Salah satu cara untuk menghapus sertifikat ini dari komputer Anda adalah melalui PowerShell

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

      • Thumbprint sertifikat server yang sesuai disebarkan sebagai rahasia ke Azure KeyVault. Visual Studio akan mencoba menemukan atau membuat KeyVault dengan awalan MSVSAZ* di wilayah yang sesuai dengan sumber daya mesin virtual atau set skala mesin virtual. Oleh karena itu, semua sumber daya mesin virtual atau set skala mesin virtual yang disebarkan ke wilayah tersebut akan menggunakan KeyVault yang sama.
      • Untuk menghapus rahasia thumbprint sertifikat server, buka portal Azure dan temukan MSVSAZ* KeyVault di wilayah yang sama yang meng-host sumber daya Anda. Menghapus rahasia yang harus diberi label remotedebugcert<<ResourceName>>
      • Anda juga perlu menghapus rahasia server dari sumber daya Anda melalui PowerShell.

      Untuk komputer virtual:

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

      Rangkaian skala komputer virtual:

      $vmss.VirtualMachineProfile.OsProfile.Secrets[0].VaultCertificates.Clear()
      Update-AzVmss -ResourceGroupName $rgName -VMScaleSetName $vmssName -VirtualMachineScaleSet $vmss
      
  3. Menghapus semua kumpulan NAT Masuk DebuggerListener (hanya set skala mesin virtual)

    Debugger Jarak Jauh memperkenalkan kumpulan NAT masuk DebuggerListener yang diterapkan ke penyeimbang beban set skala Anda.

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

Bagaimana cara saya menonaktifkan Snapshot Debugger?

Untuk App Service:

  1. Nonaktifkan Snapshot Debugger melalui portal Azure untuk App Service Anda.

  2. Portal Azure > bilah sumber daya Layanan Aplikasi Anda >Pengaturan Aplikasi

  3. Hapus pengaturan Aplikasi berikut di portal Azure dan simpan perubahan.

    • INSTRUMENTATIONENGINE_EXTENSION_VERSION
    • SNAPSHOTDEBUGGER_EXTENSION_VERSION

    Peringatan

    Setiap perubahan pada Pengaturan Aplikasi akan memulai hidupkan ulang aplikasi. Untuk informasi selengkapnya tentang Pengaturan Aplikasi, lihat Mengonfigurasi aplikasi App Service di portal Microsoft Azure.

Untuk AKS:

  1. Perbarui Dockerfile Anda untuk menghapus bagian yang sesuai dengan Visual Studio Snapshot Debugger pada gambar Docker.
  2. Bangun ulang dan sebarkan ulang gambar Docker yang diubah.

Untuk mesin virtual/set skala mesin virtual:

Ada beberapa cara untuk menonaktifkan Snapshot Debugger:

  • Cloud Explorer > sumber daya mesin virtual/set skala mesin virtual Anda > Nonaktifkan Diagnostik

  • Portal Azure > bilah sumber daya mesin virtual/set skala mesin virtual Anda > Ekstensi > Copot pemasangan ekstensi Microsoft.Insights.VMDiagnosticsSettings

  • PowerShell Cmdlets dari Az PowerShell

    Komputer virtual:

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

    Set skala mesin virtual:

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