Menggunakan titik henti di debugger Visual Studio
Titik henti adalah salah satu teknik penelusuran kesalahan terpenting di toolbox pengembang Anda. Anda mengatur titik henti di mana pun Anda ingin menjeda eksekusi debugger. Misalnya, Anda mungkin ingin melihat status variabel kode atau melihat tumpukan panggilan pada titik henti tertentu. Jika Anda mencoba mengatasi peringatan atau masalah saat menggunakan titik henti, lihat Memecahkan masalah titik henti di debugger Visual Studio.
Catatan
Jika Anda mengetahui tugas atau masalah yang ingin Anda selesaikan, tetapi Anda perlu mengetahui jenis titik henti yang digunakan, lihat FAQ - Temukan fitur penelusuran kesalahan Anda.
Mengatur titik henti dalam kode sumber
Anda dapat mengatur titik henti pada setiap baris kode yang dapat dijalankan. Misalnya, dalam kode C# berikut, Anda dapat mengatur titik henti pada baris kode dengan penetapan variabel (int testInt = 1
), loop for
, atau kode apa pun di dalam loop for
. Anda tidak dapat mengatur titik henti pada tanda tangan metode, deklarasi untuk namespace layanan atau kelas, atau deklarasi variabel jika tidak ada tugas dan tidak ada getter/setter.
Untuk mengatur titik henti dalam kode sumber:
- Klik di margin paling kiri di samping baris kode. Anda juga dapat memilih garis dan menekan F9, pilih Debug>Titik Henti Tombol, atau klik kanan dan pilih Titik Henti>Sisipkan titik henti. Titik henti muncul sebagai titik merah di margin kiri.
Untuk sebagian besar bahasa komputer termasuk C#, titik henti dan baris eksekusi saat ini secara otomatis disorot. Untuk kode C++, Anda dapat mengaktifkan penyorotan titik henti dan baris saat ini dengan memilih Alat (atau Debug) >Opsi>Penelusuran Kesalahan >Sorot seluruh baris sumber untuk titik henti dan pernyataan saat ini (khusus C++).
Saat Anda mendebug, eksekusi dijeda di titik henti, sebelum kode pada baris itu dieksekusi. Simbol titik henti menunjukkan panah kuning.
Pada titik henti dalam contoh berikut, nilai testInt
masih 3. Jadi, nilainya tidak berubah sejak variabel diinisialisasi (diatur ke nilai 3) karena pernyataan dengan warna kuning belum dijalankan.
Pada titik henti dalam contoh berikut, nilai testInt
masih 1. Jadi, nilainya tidak berubah sejak variabel diinisialisasi (diatur ke nilai 1) karena pernyataan berwarna kuning belum dijalankan.
Saat debugger berhenti di titik henti, Anda dapat melihat status aplikasi saat ini, termasuk nilai variabel dan tumpukan panggilan.
Berikut adalah beberapa petunjuk umum untuk bekerja dengan titik henti.
Titik henti adalah tombol. Anda dapat mengekliknya, menekan F9, atau menggunakan Debug>Titik Henti Tombol untuk menghapus atau memasukkannya kembali.
Untuk menonaktifkan titik henti tanpa menghapusnya, arahkan kursor atau klik kanan, dan pilih Nonaktifkan titik henti. Titik henti yang dinonaktifkan muncul sebagai titik kosong di margin kiri atau jendela Titik Henti. Untuk mengaktifkan kembali titik henti, arahkan kursor ke atau klik kanan titik henti tersebut, lalu pilih Aktifkan titik henti.
Atur kondisi dan tindakan, tambahkan dan edit label, atau ekspor titik henti dengan mengeklik kanan dan memilih perintah yang sesuai, atau mengarahkan kursor ke atasnya dan memilih ikon Pengaturan.
Tindakan titik henti dan titik jejak
Titik pelacakan adalah titik henti yang mencetak pesan ke jendela Output. Tracepoint dapat bertindak seperti pernyataan jejak sementara dalam bahasa pemrograman dan tidak menghentikan sementara eksekusi kode. Anda membuat titik pelacakan dengan mengatur tindakan khusus di jendela Pengaturan Titik Henti. Untuk instruksi terperinci, lihat Menggunakan titik pelacakan di debugger Visual Studio.
Kondisi titik henti
Anda dapat mengontrol kapan dan di mana titik henti dijalankan dengan mengatur kondisi. Kondisi dapat berupa ekspresi valid apa pun yang dikenali oleh debugger. Untuk informasi lebih lanjut tentang ekspresi yang valid, lihat Ekspresi di debugger.
Untuk mengatur kondisi titik henti:
Klik kanan simbol titik henti dan pilih Kondisi (atau tekan Alt + F9, C). Atau arahkan mouse ke simbol titik henti, pilih ikon Pengaturan, lalu pilih Kondisi di jendela Pengaturan Titik Henti.
Anda juga dapat mengeklik kanan di margin paling kiri di sebelah baris kode dan memilih Masukkan Titik Henti Kondisional dari menu konteks untuk mengatur titik henti kondisional baru.
Anda juga dapat mengatur ketentuan di jendela Titik Henti dengan mengeklik kanan titik henti dan memilih Pengaturan, lalu memilih Kondisi
Di drop-down, pilih Ekspresi Kondisional, Hit Count, atau Filter, dan tetapkan nilainya.
Pilih Tutup atau tekan Ctrl+Enter untuk menutup jendela Pengaturan Titik Henti. Atau, dari jendela Titik Henti, pilih OK untuk menutup dialog.
Titik henti dengan kondisi yang diatur muncul dengan simbol + di kode sumber dan jendela Titik Henti.
Membuat ungkapan bersyarat
Saat Anda memilih Ungkapan bersyarat, Anda dapat memilih di antara dua ketentuan: Benar atau Saat diubah. Pilih Benar untuk menghentikan saat ekspresi terpenuhi, atau Saat diubah untuk memutuskan saat nilai ekspresi telah berubah.
Dalam contoh berikut, titik henti hanya terjadi bila nilai testInt
adalah 4:
Dalam contoh berikut, titik henti hanya terjadi ketika nilai testInt
berubah:
Jika Anda mengatur kondisi titik henti dengan sintaksis yang tidak valid, pesan peringatan akan muncul. Jika Anda menentukan kondisi titik henti dengan sintaksis yang valid tetapi semantik yang tidak valid, pesan peringatan akan muncul saat titik henti pertama kali ditemui. Dalam kedua kasus tersebut, debugger akan rusak saat mencapai titik henti yang tidak valid. Titik henti dilewati hanya jika kondisinya valid dan bernilai false
.
Catatan
Untuk bidang Saat diubah, debugger tidak menganggap evaluasi pertama dari kondisi sebagai perubahan, jadi tidak mencapai titik henti pada evaluasi pertama.
Gunakan ID Objek dalam ungkapan bersyarat (khusus C# dan F#)
Ada kalanya Anda ingin mengamati perilaku suatu objek tertentu. Misalnya, Anda mungkin ingin mencari tahu mengapa suatu objek dimasukkan ke dalam koleksi lebih dari sekali. Di C# dan F#, Anda dapat membuat ID objek untuk instans tertentu dari jenis referensi, dan menggunakannya dalam kondisi titik henti. ID objek dihasilkan oleh layanan penelusuran kesalahan runtime bahasa umum (CLR) dan terkait dengan objek.
Untuk membuat ID Objek:
Atur titik henti dalam kode di suatu tempat setelah objek dibuat.
Mulai penelusuran kesalahan, dan saat eksekusi berhenti di titik henti, pilih Debug>Windows>Lokal (atau tekan Ctrl + Alt + V, L) untuk membuka jendela Lokal.
Temukan contoh objek tertentu di jendela Lokal, klik kanan, dan pilih Buat ID Objek.
Anda akan melihat $ angka plus di jendela Locals. Ini adalah ID objek.
Tambahkan titik henti baru pada titik yang ingin Anda selidiki; misalnya, ketika objek akan ditambahkan ke koleksi. Klik kanan titik henti dan pilih Kondisi.
Gunakan ID Objek di bidang Ungkapan Bersyarat. Misalnya, jika variabel
item
adalah objek yang akan ditambahkan ke koleksi, pilih Benar dan ketik item == $<n>, di mana <n> adalah nomor ID objek.Eksekusi akan rusak pada titik ketika objek itu akan ditambahkan ke koleksi.
Untuk menghapus ID Objek, klik kanan variabel di jendela Lokal dan pilih Hapus ID Objek.
Catatan
ID objek membuat referensi yang lemah, dan tidak mencegah objek dari pengumpulan sampah. Mereka hanya valid untuk sesi penelusuran kesalahan saat ini.
Tetapkan kondisi hitungan
Jika Anda menduga bahwa perulangan dalam kode Anda mulai berperilaku tidak semestinya setelah sejumlah iterasi tertentu, Anda dapat menyetel titik henti untuk menghentikan eksekusi setelah jumlah klik tersebut, daripada harus berulang kali menekan F5 untuk mencapai iterasi itu.
Di bawah Kondisi di jendela Pengaturan Titik Henti, pilih Hit Count, lalu tentukan jumlah iterasi. Dalam contoh berikut, titik henti diatur untuk mencapai setiap iterasi lainnya:
Mengatur kondisi filter
Anda dapat membatasi titik henti untuk diaktifkan hanya pada perangkat tertentu, atau dalam proses dan utas tertentu.
Di bawah Kondisi di jendela Pengaturan Titik Henti, pilih Filter, lalu masukkan satu atau beberapa ekspresi berikut:
- MachineName = "name"
- ProcessId = nilai
- ProcessName = "name"
- ThreadId = value
- ThreadName = "name"
Sertakan nilai string dalam tanda kutip ganda. Anda dapat menggabungkan klausa menggunakan &
(AND), ||
(OR), !
(NOT), dan tanda kurung.
Mengatur titik henti fungsi
Anda dapat menghentikan eksekusi ketika suatu fungsi dipanggil. Ini berguna, misalnya, ketika Anda mengetahui nama fungsi tetapi tidak mengetahui lokasinya. Ini juga berguna jika Anda memiliki fungsi dengan nama yang sama dan Anda ingin memecah semuanya (seperti fungsi yang kelebihan beban atau fungsi dalam proyek yang berbeda).
Untuk mengatur titik henti fungsi:
Pilih Debug>Titik Henti Baru>Fungsi Titik Henti, atau tekan Ctrl + K, B.
Anda juga dapat memilih Baru>Fungsi Titik Henti di jendela Titik Henti.
Dalam dialog Fungsi Titik Henti Baru, masukkan nama fungsi di kotak Fungsi Nama.
Untuk mempersempit spesifikasi fungsi:
Gunakan nama fungsi yang sepenuhnya memenuhi syarat.
Contoh:
Namespace1.ClassX.MethodA()
Tambahkan jenis parameter dari fungsi yang kelebihan beban.
Contoh:
MethodA(int, string)
Menggunakan '!' simbol untuk menentukan modul.
Contoh:
App1.dll!MethodA
Gunakan operator konteks di C++ asli.
{function, , [module]} [+<line offset from start of method>]
Contoh:
{MethodA, , App1.dll}+2
Di dropdown Bahasa, pilih bahasa fungsi.
Pilih OK.
Mengatur titik henti fungsi menggunakan alamat memori (khusus C++ asli)
Anda dapat menggunakan alamat suatu objek untuk mengatur titik henti fungsi pada metode yang dipanggil oleh instans kelas tertentu. Misalnya, dengan objek beralamat jenis my_class
, Anda dapat mengatur titik henti fungsi pada metode my_method
yang dipanggil instans.
Atur titik henti di suatu tempat setelah instans kelas dipakai.
Temukan alamat instans (misalnya,
0xcccccccc
).Pilih Debug>Titik Henti Baru>Fungsi Titik Henti, atau tekan Ctrl + K, B.
Tambahkan yang berikut ini ke kotak Nama Fungsi, dan pilih bahasa komputer C++.
((my_class *) 0xcccccccc)->my_method
Mengatur titik henti data (.NET Core 3.x atau .NET 5+)
Titik henti data memutuskan eksekusi saat properti objek tertentu berubah.
Untuk mengatur titik henti data:
Dalam proyek .NET Core atau .NET 5+, mulai penelusuran kesalahan, dan tunggu hingga titik henti tercapai.
Di jendela Otomatis, Watch, atau Lokal, klik kanan properti dan pilih Hentikan saat nilai berubah di menu konteks.
Titik henti data untuk .NET Core dan .NET 5+ tidak akan berfungsi untuk:
- Properti yang tidak dapat diperluas di tooltip, Lokal, Otomatis, atau Jendela pengawasan
- Variabel statis
- Kelas dengan Atribut DebuggerTypeProxy
- Bidang di dalam struktur
Untuk jumlah maksimum yang dapat Anda atur, lihat Batas perangkat keras titik henti data.
Mengatur titik henti data (hanya C++ asli)
Titik henti data menghentikan eksekusi ketika nilai yang disimpan pada alamat memori tertentu berubah. Jika nilainya dibaca tetapi tidak diubah, eksekusi tidak rusak.
Untuk mengatur titik henti data:
Dalam proyek C++, mulai penelusuran kesalahan, dan tunggu sampai titik henti tercapai. Pada menu Debug, pilih Titik Henti Baru>Titik Henti Data.
Anda juga dapat memilih Baru>Titik Henti Data di jendela Titik Henti atau mengeklik kanan item di Otomatis, Watch, atau Lokal dan pilih Hentikan ketika nilai berubah di menu konteks.
Di kotak Alamat, ketik alamat memori, atau ekspresi yang mengevaluasi ke alamat memori. Misalnya, ketik
&avar
untuk menghentikan saat konten variabelavar
berubah.Di dropdown Jumlah Byte, pilih jumlah byte yang Anda inginkan untuk ditonton oleh debugger. Misalnya, jika Anda memilih 4, debugger akan melihat empat byte mulai dari
&avar
dan berhenti jika salah satu byte tersebut mengubah nilai.
Titik henti sementara data tidak berfungsi dalam kondisi berikut:
- Proses yang tidak sedang didebug menulis ke lokasi memori.
- Lokasi memori dibagi antara dua atau lebih proses.
- Lokasi memori diperbarui di dalam kernel. Misalnya, jika memori diteruskan ke fungsi
ReadFile
Windows 32-bit, memori akan diperbarui dari mode kernel, sehingga debugger tidak akan rusak saat pembaruan. - Di mana ekspresi jam lebih besar dari 4 byte pada perangkat keras 32-bit dan 8 byte pada perangkat keras 64-bit. Ini adalah batasan arsitektur x86.
Catatan
Titik henti data bergantung pada alamat memori tertentu. Alamat variabel berubah dari satu sesi penelusuran kesalahan ke sesi berikutnya, sehingga titik henti sementara data secara otomatis dinonaktifkan di akhir setiap sesi penelusuran kesalahan.
Jika Anda mengatur titik henti data pada variabel lokal, titik henti tetap diaktifkan saat fungsi berakhir, tetapi alamat memori tidak lagi berlaku, sehingga perilaku titik henti tidak dapat diprediksi. Jika Anda menetapkan titik henti data pada variabel lokal, Anda harus menghapus atau menonaktifkan titik henti sebelum fungsi berakhir.
Batas perangkat keras titik henti data
Kernel Windows dan perangkat keras yang mendasar memiliki batas berikut saat mengatur titik henti data. Batas mengacu pada jumlah maksimum titik henti data yang dapat Anda atur.
Arsitektur prosesor | Batas titik henti data |
---|---|
x64 dan x86 | 4 |
ARM64 | 2 |
ARM | 1 |
Mengatur titik henti dependen
Titik henti dependen menghentikan eksekusi hanya jika titik henti lain pertama kali terkena. Jadi, dalam skenario kompleks seperti penelusuran kesalahan aplikasi multi-utas, Anda dapat mengonfigurasi titik henti tambahan setelah titik henti lain pertama kali terkena. Ini dapat membuat kode penelusuran kesalahan di jalur umum seperti loop game atau API utilitas jauh lebih mudah karena titik henti dalam fungsi tersebut dapat dikonfigurasi untuk diaktifkan hanya jika fungsi dipanggil dari bagian tertentu aplikasi Anda.
Untuk mengatur titik henti dependen:
Arahkan mouse ke simbol titik henti, pilih ikon Pengaturan, lalu pilih Hanya aktifkan saat titik henti berikut tercapai di jendela Pengaturan Titik Henti.
Di dropdown, pilih titik henti prasyarat yang Anda inginkan untuk menjadi titik henti sementara Anda saat ini.
Pilih Tutup atau tekan Ctrl+Enter untuk menutup jendela Pengaturan Titik Henti. Atau, dari jendela Titik Henti, pilih OK untuk menutup dialog.
Anda juga dapat menggunakan menu konteks klik kanan untuk mengatur titik henti dependen.
Klik kanan di margin paling kiri di sebelah baris kode dan pilih Masukkan Titik Henti Dependen dari menu konteks.
- Titik henti dependen tidak berfungsi jika hanya ada satu titik henti di aplikasi Anda.
- Titik henti dependen dikonversi ke titik henti garis normal jika titik henti prasyarat dihapus.
Mengatur titik henti sementara
Titik henti ini memungkinkan Anda memecahkan kode hanya sekali. Saat penelusuran kesalahan, debugger Visual Studio hanya menjeda aplikasi yang sedang berjalan sekali untuk titik henti ini dan kemudian menghapusnya segera setelah terkena.
Untuk mengatur titik henti sementara:
Arahkan mouse ke simbol titik henti sementara, pilih ikon Pengaturan, lalu pilih Hapus titik henti sementara setelah terkena di jendela Pengaturan Titik Henti.
Pilih Tutup atau tekan Ctrl+Enter untuk menutup jendela Pengaturan Titik Henti. Atau, dari jendela Titik Henti, pilih OK untuk menutup dialog.
Anda juga dapat menggunakan menu konteks klik kanan untuk mengatur titik henti sementara.
Klik kanan di margin paling kiri di sebelah baris kode dan pilih Masukkan Titik Henti Sementara dari menu konteks.
Atau, cukup gunakan pintasan F9 + Shift + Alt, T dan atur titik henti sementara pada baris yang diinginkan.
Mengelola titik henti di jendela Titik Henti
Anda dapat menggunakan jendela Titik Henti untuk melihat dan mengelola semua titik henti dalam solusi Anda. Lokasi terpusat ini sangat membantu dalam solusi besar, atau untuk skenario penelusuran kesalahan kompleks di mana titik henti sangat penting.
Di jendela Titik Hapus, Anda dapat menelusuri, mengurutkan, memfilter, mengaktifkan/menonaktifkan, atau menghapus titik henti. Anda juga dapat mengatur kondisi dan tindakan, atau menambahkan fungsi baru atau titik henti data.
Untuk membuka jendela Titik Henti, pilih Debug>Windows>Titik Henti, atau tekan Ctrl +Alt+B.
Untuk memilih kolom yang akan ditampilkan di jendela Titik Henti, pilih Tampilkan Kolom. Pilih header kolom untuk mengurutkan daftar titik henti menurut kolom itu.
Label titik henti
Anda dapat menggunakan label untuk mengurutkan dan memfilter daftar titik henti di jendela Titik Henti.
- Untuk menambahkan label ke titik henti, klik kanan titik henti di kode sumber atau jendela Titik Henti, lalu pilih Edit label. Tambahkan label baru atau pilih yang sudah ada, lalu pilih Oke.
- Urutkan daftar titik henti di jendela Titik Henti dengan memilih Labels, Kondisi, atau header kolom lainnya. Anda dapat memilih kolom yang akan ditampilkan dengan memilih Tampilkan Kolom di toolbar.
Grup titik henti
Untuk skenario penelusuran kesalahan yang kompleks, Anda mungkin ingin membuat grup titik henti untuk mengatur titik henti Anda. Ini memungkinkan Anda untuk dengan cepat mengaktifkan dan menonaktifkan pengelompokan logis titik henti, berdasarkan skenario saat ini yang Anda coba debug.
Anda dapat membuat titik henti di jendela Titik Henti dengan memilih Grup Titik Henti Baru>, dan memberikan nama untuk grup tersebut. Untuk menambahkan titik henti ke grup, klik kanan titik henti dan pilih Tambahkan ke Nama> grup Grup><Titik Henti. Atau, seret dan letakkan titik henti Anda ke dalam grup yang diinginkan.
Untuk mengatur grup titik henti default, klik kanan grup dan pilih Atur sebagai Grup Titik Henti default. Saat Anda mengatur grup titik henti default, titik henti yang baru dibuat secara otomatis ditambahkan ke grup.
Mengekspor dan mengimpor titik henti
Untuk menyimpan atau membagikan status dan lokasi titik henti, Anda dapat mengekspor atau mengimpornya.
Mulai visual Studio 2022 versi 17.12 Pratinjau 3, grup titik henti juga disertakan dengan titik henti yang diekspor dan diimpor.
- Untuk mengekspor satu titik henti ke file XML, klik kanan titik henti di kode sumber atau jendela Titik Henti, dan pilih Ekspor atau Ekspor yang dipilih. Pilih lokasi ekspor, lalu pilih Simpan. Lokasi default adalah folder solusi.
- Untuk mengekspor beberapa titik henti, di jendela Titik Henti, pilih kotak di samping titik henti, atau masukkan kriteria penelusuran di bidang Penelusuran. Pilih ikon Ekspor semua titik henti yang cocok dengan kriteria penelusuran saat ini, dan simpan file.
- Untuk mengekspor semua titik henti, batalkan pilihan semua kotak dan biarkan bidang Penelusuran kosong. Pilih ikon Ekspor semua titik henti yang cocok dengan kriteria penelusuran saat ini, dan simpan file.
- Untuk mengimpor titik henti, di jendela Titik Henti, pilih ikon Import titik henti dari file, navigasikan ke lokasi file XML, dan pilih Buka.
Mengatur titik henti dari jendela debugger
Anda juga dapat mengatur titik henti dari jendela debugger Tumpukan Panggilan dan Disassembly.
Mengatur titik henti di jendela Tumpukan Panggilan
Untuk menghentikan instruksi atau baris tempat fungsi panggilan kembali, Anda dapat mengatur titik henti di jendela Tumpukan Panggilan.
Untuk mengatur titik henti di jendela Tumpukan Panggilan:
Untuk membuka jendela Tumpukan Panggilan, Anda harus dijeda selama proses penelusuran kesalahan. Pilih Debug>Windows>Tumpukan Panggilan, atau tekan Ctrl+Alt+C.
Di jendela Tumpukan Panggilan, klik kanan fungsi panggilan dan pilih Titik Henti>Sisipkan Titik Henti, atau tekan F9.
Simbol titik henti muncul di sebelah nama panggilan fungsi di margin kiri tumpukan panggilan.
Titik henti tumpukan panggilan muncul di jendela Titik Henti sebagai alamat, dengan lokasi memori yang sesuai dengan instruksi yang dapat dieksekusi berikutnya dalam fungsi tersebut.
Debugger berhenti pada instruksi.
Untuk informasi lebih lanjut tentang tumpukan panggilan, lihat Cara: Menggunakan jendela Tumpukan Panggilan.
Untuk melacak titik henti secara visual selama eksekusi kode, lihat Metode peta pada tumpukan panggilan saat penelusuran kesalahan.
Mengatur titik henti di jendela Disassembly
Untuk membuka jendela Disassembly, Anda harus dijeda selama proses penelusuran kesalahan. Pilih Debug>Windows>Disassembly, atau tekan Ctrl+Alt+P.
Di jendela Disassembly, klik di margin kiri instruksi yang ingin Anda putuskan. Anda juga dapat memilihnya dan menekan F9, atau klik kanan dan pilih Titik Henti>Sisipkan Titik Henti.