Memeriksa status aplikasi sebelumnya menggunakan langkah mundur IntelliTrace di Visual Studio (Visual Studio Enterprise)
Langkah mundur IntelliTrace secara otomatis mengambil snapshot aplikasi Anda di setiap peristiwa langkah debugger dan titik henti. Snapshot yang direkam memungkinkan Anda untuk kembali ke titik henti atau langkah sebelumnya dan menampilkan status aplikasi seperti saat sebelumnya. Langkah mundur IntelliTrace dapat menghemat waktu Anda saat Anda ingin melihat status aplikasi sebelumnya tetapi tidak ingin menghidupkan ulang penelusuran kesalahan atau membuat ulang status aplikasi yang diinginkan.
Langkah mundur IntelliTrace tersedia mulai di Visual Studio Enterprise 2017 versi 15.5 dan yang lebih baru, dan memerlukan Pembaruan Windows 11 atau Windows 10 Anniversary atau yang lebih lama. Fitur tersebut saat ini didukung untuk penelusuran kesalahan ASP.NET, WinForms, WPF, aplikasi konsol terkelola, dan pustaka kelas terkelola. Dimulai dengan Visual Studio 2017 Enterprise versi 15.7, fitur ini juga didukung untuk ASP.NET Core dan .NET Core. Dimulai dengan Visual Studio 2017 Enterprise versi 15.9 Pratinjau 2, fitur ini juga didukung untuk aplikasi asli yang menargetkan Windows. Penelusuran kesalahan aplikasi UWP saat ini tidak didukung.
Dalam tutorial ini, Anda akan:
- Mengaktifkan snapshot dan peristiwa IntelliTrace
- Membuka peristiwa menggunakan perintah langkah mundur dan langkah maju
- Menampilkan snapshot peristiwa
Mengaktifkan mode snapshot dan peristiwa IntelliTrace
Buka proyek Anda di Visual Studio Enterprise.
Buka pengaturan Alat>Opsi>IntelliTrace, lalu pilih opsi Snapshot dan peristiwa IntelliTrace.
Mulai Visual Studio 2017 Enterprise versi 15.9 Pratinjau 2, opsi ini bernama Snapshot IntelliTrace (terkelola dan asli).
Jika Anda ingin mengonfigurasi opsi untuk menampilkan snapshot pada pengecualian, pilih IntelliTrace>Tingkat Lanjut dari kotak dialog Opsi.
Opsi ini tersedia mulai Visual Studio 2017 Enterprise versi 15.7.
Saat Anda mengaktifkan peristiwa dan snapshot, mengambil snapshot pada pengecualian juga diaktifkan secara default. Anda dapat menonaktifkan snapshot pada pengecualian dengan membatalkan pilihan Kumpulkan snapshot pada peristiwa pengecualian. Ketika fitur ini diaktifkan, snapshot diambil untuk pengecualian yang tidak ditangani. Untuk pengecualian yang ditangani, rekam jepret diambil hanya jika pengecualian dilemparkan dan jika bukan pengguliran ulang pengecualian yang dilemparkan sebelumnya. Anda dapat mengatur jumlah maksimum snapshot pada pengecualian dengan memilih nilai dari daftar drop-down. Maksimum berlaku untuk setiap kali aplikasi Anda memasuki mode jeda (seperti saat aplikasi Anda mencapai titik henti).
Catatan
Snapshot diambil hanya untuk peristiwa pengecualian yang direkam IntelliTrace. Untuk kode terkendali, Anda dapat menentukan peristiwa apa yang direkam IntelliTrace dengan memilihAlat>Opsi>Peristiwa IntelliTrace.
Dalam proyek Anda, atur satu atau beberapa titik henti dan mulai penelusuran kesalahan (tekan F5), atau mulai penelusuran kesalahan dengan menelusuri kode Anda (F10 atau F11).
IntelliTrace mengambil snapshot proses aplikasi pada setiap langkah debugger, peristiwa titik henti, dan peristiwa pengecualian yang tidak ditangani. Peristiwa ini direkam di tab Peristiwa di jendela Alat Diagnostik, bersama dengan peristiwa IntelliTrace lainnya. Untuk membuka jendela ini, pilih Debug>Windows>Tunjukkan Alat Diagnostik.
Ikon kamera muncul di samping peristiwa tempat snapshot tersedia.
Untuk alasan performa, rekam jepret tidak diambil saat Anda melangkah dengan cepat. Jika tidak ada ikon kamera yang muncul di samping langkah, coba melangkah lebih lambat.
Beralih dan menampilkan snapshot
Beralih antar peristiwa menggunakan tombol Melangkah Mundur (Alt + [) dan Melangkah Maju (Alt + ]) di toolbar Debug.
Tombol-tombol ini mengalihkan peristiwa yang muncul di tab Peristiwa di jendela Alat Diagnostik. Melangkah mundur atau maju ke suatu peristiwa secara otomatis mengaktifkan penelusuran kesalahan historis pada peristiwa yang dipilih.
Saat Anda melangkah mundur atau maju, Visual Studio memasuki mode penelusuran kesalahan historis. Di mode ini, konteks debugger beralih ke waktu saat peristiwa yang dipilih direkam. Visual Studio juga memindahkan penunjuk ke baris kode yang sesuai di jendela sumber.
Dari tampilan ini, Anda dapat memeriksa nilai di jendela Tumpukan Panggilan, Lokal, Otomatis, dan Watch. Anda juga dapat mengarahkan mouse ke atas variabel untuk menampilkan DataTip dan melakukan evaluasi ekspresi di jendela Langsung. Data yang Anda lihat berasal dari snapshot proses aplikasi yang diambil pada saat itu.
Jadi, misalnya, jika Anda telah mencapai titik henti dan mengambil Langkah (F10), tombol Langkah Mundur menempatkan Visual Studio dalam mode historis di baris kode yang sesuai dengan titik henti.
Untuk kembali ke eksekusi langsung, pilih Lanjutkan (F5) atau pilih tautan Kembali ke Debugging Langsung di bilah info.
Anda juga dapat melihat rekam jepret dari tab Peristiwa . Pilih peristiwa dengan rekam jepret dan pilih Aktifkan Penelusuran Kesalahan Historis.
Tidak seperti perintah Atur Pernyataan Berikutnya, menampilkan snapshot tidak menjalankan ulang kode Anda; ini memberi Anda tampilan statis status aplikasi pada titik waktu yang telah terjadi di masa lalu.
Untuk mempelajari selengkapnya tentang cara memeriksa variabel di Visual Studio, lihat Pengenalan debugger
Pertanyaan Umum
Bagaimana langkah mundur IntelliTrace berbeda dari mode hanya peristiwa IntelliTrace?
IntelliTrace dalam mode hanya peristiwa memungkinkan Anda mengaktifkan penelusuran kesalahan historis pada titik henti dan langkah-langkah debugger. Namun, IntelliTrace hanya mengambil data di jendela Lokal dan Otomatis jika jendela terbuka, dan hanya menangkap data yang diperluas dan ditampilkan. Dalam mode hanya peristiwa, Anda sering tidak memiliki tampilan lengkap variabel dan objek kompleks. Selain itu, evaluasi ekspresi dan melihat data di jendela Watch tidak didukung.
Dalam mode peristiwa dan snapshot, IntelliTrace mengambil seluruh snapshot proses aplikasi, termasuk objek kompleks. Pada baris kode, Anda dapat melihat informasi yang sama seolah-olah Anda dihentikan di titik henti (dan tidak masalah apakah Anda sebelumnya memperluas informasi). Evaluasi ekspresi juga didukung saat menampilkan snapshot.
Apa dampak performa fitur ini?
Dampak pada performa langkah keseluruhan tergantung pada aplikasi Anda. Overhead mengambil snapshot sekitar 30 md. Saat snapshot diambil, proses aplikasi di-fork dan salinan fork ditangguhkan. Saat Anda melihat snapshot, Visual Studio melampirkan ke salinan proses yang di-fork. Untuk setiap snapshot, Visual Studio hanya menyalin tabel halaman dan mengatur halaman ke copy-on-write. Jika objek pada tumpukan berubah di antara langkah-langkah debugger dengan snapshot terkait, tabel halaman masing-masing kemudian disalin, menghasilkan biaya memori minimal. Jika Visual Studio mendeteksi bahwa tidak ada cukup memori untuk mengambil rekam jepret, visual Studio tidak memerlukannya.
Masalah Umum
Jika Anda menggunakan peristiwa IntelliTrace dan mode rekam jepret pada versi Windows yang lebih lama dari Windows 10 Fall Creators Update (RS3), dan jika target platform debug aplikasi diatur ke x86, IntelliTrace tidak mengambil rekam jepret.
Penyelesaian masalah:
- Jika Anda menggunakan Windows 10 Anniversary Update (RS1) dan versi Anda lebih lama dari 10.0.14393.2273, instal KB4103720.
- Jika Anda menggunakan Windows 10 Creators Update (RS2) dan versi Anda lebih lama dari 10.0.15063.1112, instal KB4103722.
- Instal atau tingkatkan ke Windows 11 atau Windows 10 Fall Creators Update (RS3).
- Atau:
Instal toolset VC++ 2015.3 v140 untuk komponen desktop (x86, x64) dari alat penginstal Visual Studio.
Bangun aplikasi target.
Dari baris perintah, gunakan
editbin
alat untuk mengaturLargeaddressaware
bendera untuk target yang dapat dieksekusi. Misalnya, Anda dapat menggunakan perintah ini (setelah memperbarui jalur): "C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise\VC\Tools\MSVC\14.12.25718\bin\Hostx86\x86\editbin.exe" /Largeaddressaware "C:\Path\To\Application\app.exe".Untuk memulai penelusuran kesalahan, tekan F5. Sekarang, snapshot diambil pada titik henti dan langkah-langkah debugger.
Catatan
Bendera
Largeaddressaware
harus diatur setiap kali executable dibangun kembali dengan perubahan.
Ketika snapshot proses aplikasi diambil pada aplikasi yang menggunakan file yang dipetakan memori yang bertahan, proses dengan snapshot memegang kunci eksklusif pada file yang dipetakan memori (bahkan setelah proses induk melepaskan kuncinya). Proses lain masih dapat membaca, tetapi tidak menulis, ke file yang dipetakan memori.
Solusi sementara:
- Hapus semua snapshot dengan mengakhiri sesi penelusuran kesalahan.
Saat men-debug aplikasi yang prosesnya memiliki jumlah wilayah memori unik yang tinggi, seperti aplikasi yang memuat sejumlah besar DLL, performa langkah dengan rekam jepret yang diaktifkan mungkin terpengaruh. Masalah ini akan diatasi dalam versi Windows mendatang. Jika Anda mengalami masalah ini, hubungi kami di stepback@microsoft.com.
Saat menyimpan file dengan Sesi Debug > IntelliTrace > Simpan IntelliTrace di bawah mode peristiwa dan rekam jepret, data lain yang diambil dari rekam jepret tidak tersedia dalam file . itrace. Pada peristiwa langkah dan titik henti, Anda melihat informasi yang sama seolah-olah Anda telah menyimpan file dalam mode hanya peristiwa IntelliTrace.
Langkah berikutnya
Di tutorial ini, Anda telah mempelajari cara menggunakan langkah mundur IntelliTrace. Anda mungkin ingin mempelajari lebih lanjut tentang fitur IntelliTrace lainnya.