Menavigasi melalui kode dengan menggunakan debugger Visual Studio

Debugger Visual Studio dapat membantu Anda menavigasi melalui kode untuk memeriksa status aplikasi dan menunjukkan alur eksekusinya, yang juga dikenal sebagai langkah kode. Anda dapat menggunakan pintasan keyboard, perintah debug, titik henti, dan fitur lainnya untuk masuk dengan cepat ke kode yang ingin Anda periksa. Dengan lebih terbiasa dengan perintah navigasi debugger dan pintasan, Anda dapat menemukan dan mengatasi masalah aplikasi dengan lebih cepat dan lebih mudah. Untuk daftar pintasan keyboard yang paling umum yang terkait dengan navigasi dan penelusuran kesalahan kode, lihat bagian Debug di Pintasan keyboard.

Catatan

Jika Anda baru menggunakan kode penelusuran kesalahan, Anda mungkin ingin membaca Penelusuran kesalahan untuk pemula absolut dan Teknik dan alat penelusuran kesalahan sebelum membaca artikel ini.

Mulai penelusuran kesalahan dan masukkan mode jeda

Beberapa perintah navigasi memulai aplikasi Anda dan secara otomatis melampirkan debugger. Aplikasi Anda dijeda pada baris kode tertentu berdasarkan perintah yang Anda gunakan untuk memulai navigasi, dan Anda memasukkan mode pemutusan (yaitu, aplikasi Anda dijeda di debugger).

Dalam mode jeda, eksekusi aplikasi ditangguhkan, sementara fungsi, variabel, dan objek tetap dalam memori. Saat debugger dalam mode jeda, Anda dapat menavigasi melalui kode Anda. Ada dua cara yang sangat umum untuk memasukkan mode istirahat dengan cepat:

  • Atur titik henti dan mulai aplikasi Anda.

  • Jalankan ke lokasi atau fungsi tertentu.

    Misalnya, di editor kode di Visual Studio, Anda dapat menggunakan perintah Jalankan Ke Kursor untuk memulai aplikasi, dengan debugger terpasang, dan memasuki mode jeda. Kemudian Anda dapat menggunakan perintah langkah untuk menavigasi kode.

    Animation that shows selecting Run To Cursor and then F11.

    Animation that shows selecting Run To Cursor and then F11.

Perintah langkah kode dapat digunakan untuk memulai aplikasi Anda, tetapi lebih umum digunakan setelah Anda memasuki mode jeda.

Beberapa perintah navigasi sebagian besar digunakan saat dalam mode jeda (yaitu, saat Anda dijeda di debugger).

Mode penelusuran kesalahan dan pemutusan

Saat berada dalam mode jeda, Anda dapat menggunakan berbagai perintah untuk menavigasi melalui kode Anda. Anda dapat memeriksa nilai variabel untuk mencari pelanggaran atau bug. Untuk beberapa jenis proyek, Anda juga dapat melakukan penyesuaian pada aplikasi saat berada dalam mode jeda.

Sebagian besar jendela debugger, seperti Modul dan jendela Pengawasan, hanya tersedia saat debugger dilampirkan ke aplikasi Anda. Beberapa fitur debugger, seperti melihat nilai variabel di jendela Lokal atau mengevaluasi ekspresi di jendela Pengawasan, hanya tersedia saat debugger dijeda (yaitu, dalam mode jeda).

Catatan

Jika Anda memecah kode yang tidak memiliki file sumber atau simbol (.pdb) yang dimuat, debugger menampilkan halaman File Sumber Tidak Ditemukan atau Simbol Tidak Ditemukan yang dapat membantu Anda menemukan dan memuat file. Lihat Tentukan simbol (.pdb) dan file sumber. Jika Anda tidak dapat memuat simbol atau file sumber, Anda masih dapat men-debug instruksi perakitan di jendela Pembbongkaran.

Melangkah kode

Langkah kode mengacu pada menjalankan kode aplikasi Anda satu pernyataan pada satu waktu, dengan debugger terlampir. Perintah langkah debugger membantu Anda mengamati efek dari setiap pernyataan dan mencari tahu lebih lanjut tentang alur eksekusinya.

Melangkah ke dalam kode

Untuk berhenti pada setiap pernyataan saat Anda men-debug, gunakan Debug>Langkah Ke, atau pilih F11.

Debugger menelusuri pernyataan kode, bukan baris fisik. Misalnya, if klausa dapat ditulis pada satu baris:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Tetapi ketika Anda melangkah ke baris ini, debugger memperlakukan kondisi sebagai satu langkah dan konsekuensinya sebagai langkah lain. Dalam contoh sebelumnya, kondisinya benar.

Pada panggilan fungsi berlapis, Langkah Ke langkah-langkah ke fungsi yang paling dalam berlapis. Misalnya, jika Anda menggunakan Langkah Ke pada panggilan seperti Func1(Func2()), debugger melangkah ke fungsi Func2.

Tip

Saat menjalankan setiap baris kode, Anda dapat mengarahkan mouse ke atas variabel untuk melihat nilainya, atau menggunakan jendela Lokal dan Pengawasan untuk melihat perubahan nilai. Anda juga dapat melacak tumpukan panggilan secara visual saat melangkah ke fungsi. (Hanya untuk Visual Studio Enterprise, lihat Metode peta pada tumpukan panggilan saat penelusuran kesalahan.)

Menelusuri kode dan melewati beberapa fungsi

Anda mungkin tidak peduli tentang fungsi saat men-debug. Atau Anda mungkin tahu beberapa kode berfungsi, seperti kode pustaka yang diuji dengan baik. Anda dapat menggunakan perintah berikut untuk melewati kode saat Anda melangkah dengan kode. Fungsi masih berjalan, tetapi debugger melompatinya.

Perintah keyboard Perintah menu debug Deskripsi
F10 Step Over Jika baris saat ini berisi panggilan fungsi, Lewati menjalankan kode lalu menangguhkan eksekusi pada baris pertama kode setelah fungsi yang disebut kembali.
Shift+F11 Keluar Keluar terus menjalankan kode dan menunda eksekusi ketika fungsi saat ini kembali. Debugger melewati fungsi saat ini.

Jalankan ke lokasi atau fungsi tertentu

Anda mungkin lebih suka menjalankan langsung ke lokasi atau fungsi tertentu ketika Anda tahu dengan tepat kode apa yang ingin Anda periksa atau jika Anda tahu di mana Anda ingin memulai penelusuran kesalahan.

  • Mengatur titik henti adalah yang terbaik jika Anda merasa ingin menggunakan kembali titik henti.
  • Metode lain adalah untuk kenyamanan, dan mirip dengan mengatur titik henti sementara.

Jalankan ke titik henti dalam kode

Untuk mengatur titik henti sederhana dalam kode Anda, pilih margin paling kiri di samping baris kode tempat Anda ingin menangguhkan eksekusi. Anda juga dapat memilih baris lalu pilih F9, pilih Debug>Alihkan Titik Henti, atau klik kanan dan pilih Titik Henti>Sisipkan Titik Henti. Titik henti muncul sebagai titik merah di margin kiri di samping baris kode. Debugger menangguhkan eksekusi tepat sebelum baris berjalan.

Screenshot that shows how to set a breakpoint.

Screenshot that shows how to set a breakpoint.

Titik henti di Visual Studio menyediakan serangkaian fungsionalitas yang kaya, seperti titik henti kondisional dan titik pelacakan. Untuk detailnya, lihat Menggunakan titik henti.

Jalankan ke titik henti fungsi

Anda dapat mengatur debugger untuk dijalankan hingga mencapai fungsi yang ditentukan. Anda dapat menentukan fungsi berdasarkan nama, atau Anda dapat memilihnya dari tumpukan panggilan.

Untuk menentukan titik henti fungsi berdasarkan nama:

  1. Pilih Debug>Titik Henti Baru>Titik Henti Fungsi.

  2. Dalam dialog Titik Henti Fungsi Baru, masukkan nama fungsi dan pilih bahasanya:

    Screenshot that shows the New Function Breakpoint dialog.

    Screenshot that shows the New Function Breakpoint dialog.

  3. Pilih OK.

Jika fungsi kelebihan beban atau di lebih dari satu namespace layanan, Anda dapat memilih yang Anda inginkan di jendela Titik Henti:

Screenshot that shows breakpoints window.

Screenshot that shows breakpoints window.

Untuk memilih titik henti fungsi dari tumpukan panggilan:

  1. Saat menelusuri kesalahan, buka jendela Tumpukan Panggilan dengan memilih Debug>Windows>Tumpukan Call.

  2. Di jendela Tumpukan Panggilan, klik kanan fungsi dan pilih Jalankan Ke Kursor, atau pilih Ctrl+F10.

Untuk informasi tentang melacak tumpukan panggilan secara visual, lihat Metode peta pada tumpukan panggilan saat penelusuran kesalahan.

Jalankan ke lokasi kursor

Untuk menjalankan ke lokasi kursor, di kode sumber atau jendela Tumpukan Panggilan, pilih baris yang ingin Anda putuskan, lalu klik kanan dan pilih Jalankan Ke Kursor, atau pilih Ctrl+F10. Memilih Jalankan Ke Kursor mirip dengan mengatur titik henti sementara.

Jalankan paksa ke lokasi kursor

Untuk menjalankan ke lokasi kursor, di kode sumber atau jendela Tumpukan Panggilan, pilih baris yang ingin Anda putuskan, lalu klik kanan dan pilih Paksa Jalankan Ke Kursor. Memilih Paksa Jalankan Ke Kursor akan melewati titik henti dan pengecualian kesempatan pertama hingga debugger mencapai baris kode tempat kursor berada.

Jalankan untuk mengklik

Saat debugger dijeda, Anda dapat mengarahkan mouse ke atas pernyataan dalam kode sumber atau jendela Pembongkaran dan pilih panah hijau Jalankan eksekusi ke sini. Menggunakan Jalankan ke Klik mirip dengan mengatur titik henti sementara.

Screenshot that shows Run to Click and the green arrow.

Catatan

Jalankan ke Klik tersedia mulai Visual Studio 2017.

Paksa jalankan untuk mengklik

Saat debugger dijeda, Anda dapat mengarahkan mouse ke atas pernyataan dalam kode sumber sambil menekan tombol Shift lalu pilih Paksa jalankan eksekusi ke sini (panah hijau ganda). Saat Anda memilih opsi ini, aplikasi melampirkan debugger Visual Studio dan menjeda di lokasi kursor. Setiap titik henti dan pengecualian kesempatan pertama yang ditemukan selama eksekusi untuk sementara dinonaktifkan.

Screenshot that shows Force Run to Click.

Catatan

Paksa Jalankan ke Klik tersedia mulai Visual Studio 2022.

Memecah kode secara manual

Untuk memecah baris kode berikutnya yang tersedia di aplikasi yang sedang berjalan, pilih Debug>Hentian Semua, atau pilih Ctrl+Alt+Break.

Debug kode non-pengguna

Secara default, debugger hanya mencoba men-debug kode aplikasi Anda dengan mengaktifkan pengaturan yang disebut Hanya Kode Saya. Untuk detail tentang cara kerja fitur ini untuk berbagai jenis dan bahasa proyek, dan bagaimana Anda dapat menyesuaikannya, lihat Hanya Kode Saya.

Untuk melihat kode kerangka kerja, kode pustaka pihak ketiga, atau panggilan sistem saat penelusuran kesalahan, Anda dapat menonaktifkan Hanya Kode Saya. Di Alat (atau Debug) >Opsi>Penelusuran Kesalahan, kosongkan kotak centang Aktifkan Hanya Kode Saya. Saat Hanya Kode Saya dinonaktifkan, kode non-pengguna muncul di jendela debugger, dan debugger dapat masuk ke kode non-pengguna.

Catatan

Hanya Kode Saya tidak didukung untuk proyek perangkat.

Kode sistem debug

Jika Anda telah memuat simbol penelusuran kesalahan untuk kode sistem Microsoft dan menonaktifkan Hanya Kode Saya, Anda dapat masuk ke panggilan sistem sama seperti panggilan lainnya.

Mulai dari Visual Studio 2022 versi 17.7, Anda dapat mendekompilasi otomatis kode .NET saat melangkah ke kode eksternal tanpa perlu memuat simbol debugging secara manual. Untuk informasi selengkapnya, lihat Membuat kode sumber dari rakitan .NET saat penelusuran kesalahan.

Untuk mempelajari tentang memuat simbol Microsoft, lihat Mengonfigurasi lokasi file simbol dan opsi pemuatan.

Untuk memuat simbol untuk komponen sistem tertentu:

  1. Saat Anda men-debug, buka jendela Modul dengan memilih Debug>Windows>Modul atau dengan menekan Ctrl+Alt+U.

  2. Di jendela Modul, Anda dapat mengetahui modul mana yang memiliki simbol yang dimuat di kolom Status Simbol. Klik kanan modul yang ingin Anda muat simbolnya lalu pilih Muat Simbol.

Masuk ke properti dan operator dalam kode terkelola

Debugger melakukan langkah-langkah atas properti dan operator dalam kode terkelola secara default. Dalam kebanyakan kasus, tindakan ini memberikan pengalaman penelusuran kesalahan yang lebih baik. Untuk menonaktifkan melangkah ke properti atau operator, pilihDebug>Opsi. Pada halaman Penelusuran Kesalahan>Umum, kosongkan kotak centang Melangkahi di atas properti dan operator (Hanya terkelola).

Memindahkan penunjuk untuk mengubah alur eksekusi

Anda dapat mengubah pernyataan berikutnya yang akan berjalan dengan memindahkan penunjuk eksekusi kuning. Anda dapat menggunakan fitur ini saat dalam mode istirahat.

Ini adalah fitur debugger tingkat lanjut. Untuk informasi selengkapnya, lihat Memindahkan penunjuk eksekusi.