Bagikan melalui


Debug pengecualian dalam aplikasi .NET menggunakan Snapshot Debugger

Saat diaktifkan, Snapshot Debugger secara otomatis mengumpulkan rekam jepret debug kode sumber dan variabel saat pengecualian terjadi di aplikasi .NET langsung Anda. Snapshot Debugger di Application Insights:

  • Memantau log yang dihasilkan sistem dari aplikasi web Anda.
  • Mengumpulkan snapshot mengenai pengecualian yang paling sering terjadi.
  • Menyediakan informasi yang Anda butuhkan untuk mendiagnosis masalah dalam produksi.

Aplikasi dan lingkungan yang didukung

Aplikasi

Koleksi snapshot tersedia untuk:

Lingkungan

Lingkungan berikut didukung:

Catatan

Aplikasi klien, seperti WPF, Windows Forms, atau UWP, tidak didukung.

Prasyarat untuk menggunakan Snapshot Debugger

Paket dan konfigurasi

Perizinan

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 diakhiri dengan metode TrackException. Rekam jepret proses adalah kloning yang ditangguhkan dari proses yang sedang berjalan. Pengguna Anda mengalami sedikit atau tanpa gangguan. Dalam skenario umum:

  1. Pengecualian dilemparkan dalam aplikasi Anda yang kemudian dilaporkan ke Application Insights dengan memanggil TrackException fungsi .

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

  3. Penghitung ditambahkan untuk ID masalah.

    Ketika penghitung mencapai nilai ThresholdForSnapshotting, ID masalah ditambahkan ke rencana pengumpulan.

    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 dari peristiwa pengecualian dihitung dan dibandingkan dengan ID masalah dalam rencana koleksi.

  5. Jika ada kecocokan antara ID masalah, cuplikan 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 metode TrackException lagi dan dilaporkan ke Application Insights, bersama dengan pengidentifikasi cuplikan.

Catatan

Atur IsEnabledInDeveloperMode ke true jika Anda ingin membuat rekam jepret saat Anda melakukan 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

Pembaruan otomatis Snapshot Debugger dengan menggunakan site extension Application Insights yang telah diinstal sebelumnya.

Menambahkan ekstensi situs Application Insights secara manual untuk memperbarui Snapshot Debugger telah usang.

biaya 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
  • Saat TrackException dipanggil

Tidak ada biaya tambahan untuk menyimpan data yang diambil oleh Snapshot Debugger.

Lihat contoh skenario di mana Anda mungkin mengalami beban pemrosesan pada Snapshot Debugger.

Pengoptimalan Kode

Jika cuplikan dikumpulkan dari aplikasi Anda, mungkin ada wawasan pengecualian terkait dalam Pengoptimalan Kode gambaran umum terkonsolidasi.

Batasan

Bagian ini membahas batasan untuk Snapshot Debugger.

  • Retensi data

    Cuplikan 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 Azure portal. Maksimum 50 cuplikan diizinkan per hari untuk setiap instans Application Insights.

  • Terbitkan simbol

    Snapshot Debugger memerlukan file simbol di server produksi untuk:

    • Dekode variabel
    • Memberikan pengalaman debug di Visual Studio

    Secara bawaan, Visual Studio 2017 versi 15.2 atau yang lebih baru menerbitkan simbol untuk kompilasi rilis saat penerbitannya 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 tipe lainnya, pastikan bahwa file simbol adalah salah satu dari berikut:

    • Di folder aplikasi .dll utama yang sama (biasanya, wwwroot/bin), atau
    • Tersedia di jalur saat ini.

    Untuk informasi selengkapnya tentang berbagai opsi simbol yang tersedia, lihat dokumentasi Visual Studio. Untuk hasil terbaik, kami sarankan Anda menggunakan Full, Portable, atau Embedded.

  • Kompilasi yang dioptimalkan

    Dalam beberapa kasus, variabel lokal tidak dapat dilihat dalam build rilis karena pengoptimalan yang diterapkan oleh pengkompilasi JIT.

    Namun, dalam App Service, Snapshot Debugger dapat mendeoptimasi metode pelemparan yang merupakan bagian dari rencana pengumpulannya.

    Tips

    Instal ekstensi Situs Application Insights dalam instans App Service Anda untuk mendapatkan dukungan deoptimisasi.

Aktifkan Application Insights Snapshot Debugger untuk aplikasi Anda: