Debug pengecualian dalam aplikasi .NET menggunakan Snapshot Debugger
Saat diaktifkan, Snapshot Debugger secara otomatis mengumpulkan rekam jepret debug kode sumber dan variabel ketika pengecualian terjadi di aplikasi .NET langsung Anda. Snapshot Debugger di Application Insights:
- Memantau log yang dihasilkan sistem dari aplikasi web Anda.
- Mengumpulkan snapshot pada pengecualian yang dilemparkan teratas Anda.
- Menyediakan informasi yang Anda butuhkan untuk mendiagnosis masalah dalam produksi.
Pelajari selengkapnya tentang proses Snapshot Debugger dan Snapshot Uploader.
Aplikasi dan lingkungan yang didukung
Bagian ini mencantumkan aplikasi dan lingkungan yang didukung.
Aplikasi
Kumpulan snapshot tersedia untuk:
- .NET Framework 4.6.2 dan versi yang lebih baru.
- .NET 6.0 atau yang lebih baru di Windows.
Lingkungan
Lingkungan berikut didukung:
- Azure App Service
- Azure Functions
- Azure Cloud Services yang menjalankan OS family 4 atau yang lebih baru
- Azure Service Fabric yang berjalan di Windows Server 2012 R2 atau yang lebih baru
- Azure Virtual Machines dan Azure Virtual Machine Scale Sets yang menjalankan Windows Server 2012 R2 atau yang lebih baru
- Komputer virtual atau fisik lokal yang menjalankan Windows Server 2012 R2 atau yang lebih baru, atau Windows 8.1 atau yang lebih baru
Catatan
Aplikasi klien (misalnya, WPF, Formulir Windows, atau UWP) tidak didukung.
Prasyarat untuk menggunakan Snapshot Debugger
Paket dan konfigurasi
- Sertakan paket Snapshot Collector NuGet di aplikasi Anda.
- Mengonfigurasi parameter pengumpulan di
ApplicationInsights.config
.
Izin
- Verifikasi bahwa Anda ditambahkan ke peran Application Insights Snapshot Debugger untuk Rekam Jepret Application Insights target.
Cara kerja Snapshot Debugger
Snapshot Debugger diimplementasikan sebagai prosesor telemetri Application Insights. Saat aplikasi Anda berjalan, prosesor telemetri Snapshot Debugger ditambahkan ke alur log yang dihasilkan sistem aplikasi Anda.
Penting
Rekam jepret mungkin berisi data pribadi atau informasi sensitif lainnya dalam nilai variabel dan parameter. Data rekam jepret disimpan di wilayah yang sama dengan sumber daya Application Insights Anda.
Proses Snapshot Debugger
Proses Snapshot Debugger dimulai dan diakhir TrackException
dengan metode . Rekam jepret proses adalah klon proses yang ditangguhkan, sehingga pengguna Anda mengalami sedikit atau tanpa gangguan. Dalam skenario umum:
Aplikasi Anda melempar .
TrackException
Snapshot Debugger memantau pengecualian saat dilemparkan dengan berlangganan peristiwa
AppDomain.CurrentDomain.FirstChanceException
.Penghitung ditambahkan untuk ID masalah.
- Ketika penghitung
ThresholdForSnapshotting
mencapai nilai , ID masalah ditambahkan ke paket koleksi.
Catatan
Nilai
ThresholdForSnapshotting
minimum default adalah 1. Dengan nilai ini, aplikasi Anda harus memicu pengecualian yang sama dua kali sebelum rekam jepret dibuat.- Ketika penghitung
ID masalah peristiwa pengecualian dihitung dan dibandingkan dengan ID masalah dalam rencana pengumpulan.
Jika ada kecocokan antara ID masalah, rekam jepret proses yang sedang berjalan akan dibuat.
- Snapshot diberi pengidentifikasi unik dan pengecualian dicap dengan pengidentifikasi tersebut.
Catatan
Tingkat pembuatan snapshot dibatasi oleh pengaturan
SnapshotsPerTenMinutesLimit
. Secara default, batasnya adalah satu rekam jepret setiap 10 menit.Setelah handler
FirstChanceException
dikembalikan, pengecualian yang dilemparkan diproses seperti biasa.Pengecualian mencapai
TrackException
metode lagi dan dilaporkan ke Application Insights, bersama dengan pengidentifikasi rekam jepret.
Catatan
Atur IsEnabledInDeveloperMode
ke true
jika Anda ingin membuat rekam jepret saat Anda men-debug di Visual Studio.
Proses Pengunggah Rekam Jepret
Meskipun proses Snapshot Debugger terus berjalan dan melayani lalu lintas kepada pengguna dengan sedikit gangguan, rekam jepret diserahkan ke proses Snapshot Uploader. Dalam skenario umum, Pengunggah Rekam Jepret:
Membuat minidump.
Mengunggah minidump ke Application Insights, bersama dengan file simbol (.pdb) yang relevan.
Catatan
Tidak lebih dari 50 rekam jepret per hari dapat diunggah.
Jika Anda mengaktifkan Snapshot Debugger tetapi tidak melihat rekam jepret, lihat panduan Pemecahan Masalah.
Meningkatkan Snapshot Debugger
Snapshot Debugger meningkatkan otomatis melalui ekstensi situs Application Insights bawaan yang telah diinstal sebelumnya.
Menambahkan ekstensi situs Application Insights secara manual untuk menjaga Snapshot Debugger tetap diperbarui tidak digunakan lagi.
Overhead
Snapshot Debugger dirancang untuk digunakan di lingkungan produksi. Pengaturan default mencakup batas tarif untuk meminimalkan dampak pada aplikasi Anda.
Namun, Anda mungkin mengalami overhead CPU, memori, dan I/O kecil yang terkait dengan Snapshot Debugger, seperti:
- Ketika pengecualian dilemparkan dalam aplikasi Anda
- Jika handler pengecualian memutuskan untuk membuat rekam jepret
- Kapan
TrackException
dipanggil
Tidak ada biaya tambahan untuk menyimpan data yang diambil oleh Snapshot Debugger.
Lihat contoh skenario di mana Anda mungkin mengalami overhead Snapshot Debugger.
Batasan
Bagian ini membahas batasan untuk Snapshot Debugger.
Retensi data
Snapshot debug disimpan selama 15 hari. Kebijakan retensi data default ini ditetapkan per aplikasi. Jika Anda perlu meningkatkan nilai ini, Anda dapat meminta peningkatan dengan membuka kasus dukungan di portal Microsoft Azure. Untuk setiap instans Application Insights, jumlah maksimum yang diizinkan adalah 50 salinan bayangan per hari.
Terbitkan simbol
Snapshot Debugger memerlukan file simbol di server produksi untuk:
- Dekode variabel
- Memberikan pengalaman penelusuran kesalahan di Visual Studio
Secara default, Visual Studio 2017 versi 15.2+ menerbitkan simbol untuk build rilis saat diterbitkan ke App Service.
Dalam versi sebelumnya, Anda harus menambahkan baris berikut ke file profil
.pubxml
publikasi Anda sehingga simbol diterbitkan dalam mode rilis:<ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>
Untuk Azure Compute dan jenis lainnya, pastikan bahwa file simbol adalah:
- Di folder aplikasi
.dll
utama yang sama (biasanya,wwwroot/bin
), atau - Tersedia di jalur saat ini.
Untuk informasi selengkapnya mengenai berbagai opsi simbol yang tersedia, lihat dokumentasi Visual Studio. Untuk hasil terbaik, kami sarankan Anda menggunakan Full, Portable, atau Embedded.
Build yang dioptimalkan
Dalam beberapa kasus, variabel lokal tidak dapat dilihat dalam build rilis karena pengoptimalan yang diterapkan oleh pengkompilasi JIT.
Namun, di App Service, Snapshot Debugger dapat mendeoptimasi metode pelemparan yang merupakan bagian dari rencana pengumpulannya.
Tip
Instal ekstensi Situs Application Insights dalam instans App Service Anda untuk mendapatkan dukungan deoptimisasi.
Langkah berikutnya
Aktifkan Application Insights Snapshot Debugger untuk aplikasi Anda: