Snapshot debug pada pengecualian di aplikasi .NET

Ketika pengecualian terjadi, Anda dapat secara otomatis mengumpulkan snapshot debug dari aplikasi web langsung Anda. Snapshot menunjukkan status kode sumber dan variabel saat pengecualian dilemparkan. Snapshot Debugger di Azure Application Insights memantau telemetri pengecualian dari aplikasi web Anda. Ia mengumpulkan snapshot di pengecualian teratas Anda sehingga Anda memiliki informasi diperlukan untuk mendiagnosis masalah dalam produksi. Sertakan paket NuGet pengumpul Snapshot di aplikasi Anda, dan secara opsional konfigurasikan parameter pengumpulan di ApplicationInsights.config. Snapshot muncul di pengecualian di portal Application Insights.

Anda dapat menampilkan snapshot debug di portal untuk melihat tumpukan panggilan dan memeriksa variabel di setiap bingkai tumpukan panggilan. Untuk mendapatkan pengalaman penelusuran kesalahan/debugging yang lebih kuat dengan kode sumber, buka snapshot dengan Visual Studio 2019 Enterprise. Di Visual Studio, Anda juga dapat mengatur Snappoints untuk mengambil snapshot secara interaktif tanpa menunggu pengecualian.

Snapshot debug disimpan selama 15 hari. Kebijakan penyimpanan ini ditetapkan per aplikasi. Jika Anda perlu meningkatkan nilai ini, Anda dapat meminta peningkatan dengan membuka kasus dukungan di portal Microsoft Azure.

Mengaktifkan Snapshot Debugger Application Insights untuk aplikasi Anda

Kumpulan snapshot tersedia untuk:

  • Aplikasi .NET Framework dan ASP.NET yang menjalankan .NET Framework LTS atau yang lebih baru.
  • Aplikasi .NET Core dan ASP.NET Core yang menjalankan .NET LTS di Windows.
  • Aplikasi .NET LTS di Windows.

Kami tidak merekomendasikan penggunaan versi .NET Core sebelum LTS karena tidak didukung.

Lingkungan berikut didukung:

Catatan

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

Jika Anda telah mengaktifkan Snapshot Debugger tetapi tidak dapat melihat snapshot, periksa Panduan Pemecahan Masalah kami.

Berikan izin

Akses ke snapshot dilindungi oleh kontrol akses berbasis peran Azure (Azure RBAC). Untuk memeriksa snapshot, Anda harus terlebih dahulu ditambahkan ke peran yang diperlukan oleh pemilik langganan.

Catatan

Pemilik dan kontributor tidak secara otomatis memiliki peran ini. Jika ingin melihat snapshot, mereka harus menambahkan diri mereka ke peran tersebut.

Pemilik langganan harus menetapkan peran Application Insights Snapshot Debugger kepada pengguna yang akan memeriksa snapshot. Peran ini dapat ditetapkan ke pengguna individual atau ke grup oleh pemilik langganan untuk sumber daya Application Insights target atau grup sumber daya atau langganannya.

  1. Tetapkan peran Debugger ke Snapshot Application Insights.

    Untuk langkah yang lebih detail, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.

Penting

Perhatikan bahwa snapshot mungkin berisi data pribadi atau informasi sensitif lainnya dalam nilai variabel dan parameter. Data Snapshot disimpan di wilayah yang sama dengan sumber daya App Insights Anda.

Melihat Snapshot di portal Microsoft Azure

Setelah pengecualian terjadi di aplikasi Anda dan snapshot telah dibuat, Anda akan bisa melihat snapshot. Diperlukan waktu 5 hingga 10 menit dari pengecualian yang terjadi hingga snapshot siap dan dapat dilihat dari portal. Untuk menampilkan snapshot, di panel Kegagalan, pilih tombol Operasi saat menampilkan tab Operasi, atau pilih tombol Pengecualian saat menampilkan tab Pengecualian:

Failures Page

Pilih operasi atau pengecualian di panel kanan untuk membuka panel Detail Transaksi End-to-End, lalu pilih kejadian pengecualian. Jika snapshot tersedia untuk pengecualian yang diberikan, tombol Buka Snapshot Debug muncul di panel kanan dengan detail untuk pengecualian.

Open Debug Snapshot button on exception

Dalam tampilan Snapshot Debug, Anda akan melihat tumpukan panggilan dan panel variabel. Saat Anda memilih bingkai tumpukan panggilan di panel tumpukan panggilan, Anda dapat menampilkan variabel dan parameter lokal untuk panggilan fungsi tersebut di panel variabel.

View Debug Snapshot in the portal

Snapshot mungkin mengandung informasi sensitif, dan secara default tidak dapat dilihat. Untuk melihat snapshot, Anda harus memiliki peran Application Insights Snapshot Debugger yang ditetapkan untuk Anda.

Melihat Snapshot di Visual Studio 2017 Enterprise atau yang lebih baru

  1. Klik tombol Unduh Snapshot untuk mengunduh file .diagsession, yang dapat dibuka oleh Visual Studio Enterprise.

  2. Untuk membuka file .diagsession, Anda harus menginstal komponen Snapshot Debugger Visual Studio. Komponen Snapshot Debugger adalah komponen beban kerja ASP.NET yang diperlukan di Visual Studio dan dapat dipilih dari daftar Komponen Individual di alat penginstal Visual Studio. Jika Anda menggunakan versi Visual Studio sebelum Visual Studio 2017 versi 15.5, Anda perlu memasang ekstensi dari Marketplace Visual Studio.

  3. Setelah Anda membuka file snapshot, halaman Minidump Debugging di Visual Studio muncul. Klik Debug Kode Terkelola untuk mulai men-debug snapshot. Snapshot terbuka ke baris kode tempat pengecualian dilemparkan sehingga Anda dapat men-debug status proses saat ini.

    View debug snapshot in Visual Studio

Snapshot yang diunduh mencakup file simbol apa pun yang ditemukan di server aplikasi web Anda. File simbol ini diperlukan untuk mengaitkan data snapshot dengan kode sumber. Untuk aplikasi App Service, pastikan untuk mengaktifkan penyebaran simbol saat Anda menerbitkan aplikasi web Anda.

Cara kerja snapshot

Pengumpul Snapshot diterapkan sebagai Prosesor Telemetri Application Insights. Saat aplikasi Anda berjalan, Prosesor Telemetri Pengumpul Snapshot ditambahkan ke alur telemetri aplikasi Anda. Setiap kali aplikasi Anda memanggil TrackException, Pengumpul Snapshot menghitung ID Masalah dari jenis pengecualian yang dilemparkan dan metode pelemparannya. Setiap kali aplikasi Anda memanggil TrackException, penghitung akan ditambahkan untuk ID Masalah yang sesuai. Saat penghitung mencapai nilai ThresholdForSnapshotting, ID Masalah ditambahkan ke Rencana Kumpulan.

Pengumpul Snapshot juga memantau pengecualian saat dilemparkan dengan berlangganan kejadian AppDomain.CurrentDomain.FirstChanceException. Saat kejadian tersebut terjadi, ID Masalah pengecualian dihitung dan dibandingkan dengan ID Masalah di Rencana Kumpulan. Jika ada kecocokan, maka snapshot dari proses yang sedang berjalan dibuat. Snapshot diberi pengidentifikasi unik dan pengecualian dicap dengan pengidentifikasi tersebut. Setelah handler FirstChanceException kembali, pengecualian yang dilemparkan diproses seperti biasa. Akhirnya, pengecualian mencapai metode TrackException lagi di mana ia, bersama dengan pengidentifikasi snapshot, dilaporkan ke Application Insights.

Proses utama terus berjalan dan melayani lalu lintas ke pengguna dengan sedikit gangguan. Sementara itu, snapshot diserahkan ke proses Pengunggah Snapshot. Pengunggah Snapshot membuat minidump dan mengunggahnya ke Application Insights bersama dengan file simbol (.pdb) yang relevan.

Tip

  • Snapshot proses adalah klon yang ditangguhkan dari proses yang sedang berjalan.
  • Pembuatan snapshot membutuhkan waktu sekitar 10 hingga 20 milidetik.
  • Nilai default untuk ThresholdForSnapshotting adalah 1. Ini juga merupakan nilai minimumnya. Oleh karena itu, aplikasi Anda harus memicu pengecualian yang sama dua kali sebelum snapshot dibuat.
  • Atur IsEnabledInDeveloperMode ke true jika Anda ingin membuat snapshot saat melakukan debugging di Visual Studio.
  • Tingkat pembuatan snapshot dibatasi oleh pengaturan SnapshotsPerTenMinutesLimit. Secara default, batasnya adalah satu snapshot setiap sepuluh menit.
  • Tidak lebih dari 50 snapshot per hari yang dapat diunggah.

Batasan

Periode retensi data default adalah 15 hari. Untuk setiap instans Application Insights, jumlah maksimum yang diizinkan adalah 50 salinan bayangan per hari.

Menerbitkan simbol

Snapshot Debugger memerlukan file simbol di server produksi untuk men-decode variabel dan memberikan pengalaman debugging di Visual Studio. Visual Studio 2017 versi 15.2 (atau lebih tinggi) menerbitkan simbol untuk build rilis secara default saat diterbitkan ke App Service. Di versi sebelumnya, Anda perlu menambahkan baris berikut ke file .pubxml profil publikasi Anda sehingga simbol diterbitkan dalam mode rilis:

    <ExcludeGeneratedDebugSymbol>False</ExcludeGeneratedDebugSymbol>

Untuk Azure Compute dan jenis lainnya, pastikan bahwa file simbol berada di folder yang sama dari .dll aplikasi utama (biasanya, wwwroot/bin) atau tersedia di jalur saat ini.

Catatan

Untuk informasi selengkapnya mengenai berbagai opsi simbol yang tersedia, lihat dokumentasi Visual Studio. Untuk hasil terbaik, sebaiknya gunakan "Full", "Portable" atau "Embedded".

Build yang dioptimalkan

Dalam beberapa kasus, variabel lokal tidak dapat dilihat di build rilis karena pengoptimalan yang diterapkan oleh kompiler JIT. Namun, di Azure App Services, Pengumpul Snapshot dapat mendeoptimasi metode pelemparan yang merupakan bagian dari Rencana Kumpulannya.

Tip

Instal Ekstensi Situs Application Insights di App Service Anda untuk mendapatkan dukungan deoptimisasi.

Langkah berikutnya

Mengaktifkan Snapshot Debugger Application Insights untuk aplikasi Anda:

Di luar Snapshot Debugger Application Insights: