Bagikan melalui


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:

Lingkungan

Lingkungan berikut didukung:

Catatan

Aplikasi klien (misalnya, WPF, Formulir Windows, atau UWP) tidak didukung.

Prasyarat untuk menggunakan Snapshot Debugger

Paket dan konfigurasi

Izin

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:

  1. Aplikasi Anda melempar .TrackException

  2. Snapshot Debugger memantau pengecualian saat dilemparkan dengan berlangganan peristiwa AppDomain.CurrentDomain.FirstChanceException .

  3. 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.

  4. ID masalah peristiwa pengecualian dihitung dan dibandingkan dengan ID masalah dalam rencana pengumpulan.

  5. 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.

  6. Setelah handler FirstChanceException dikembalikan, pengecualian yang dilemparkan diproses seperti biasa.

  7. 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:

  1. Membuat minidump.

  2. 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: