Baca dalam bahasa Inggris

Bagikan melalui


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 kode melangkah. Anda dapat menggunakan pintasan keyboard, perintah debug, titik henti, dan fitur lainnya untuk mendapatkan kode yang ingin Anda periksa dengan cepat. 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 terkait dengan navigasi kode dan penelusuran kesalahan, 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 Debugging sebelum membaca artikel ini.

Mulai debug dan memasuki 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 memasuki mode pemutusan (yaitu, aplikasi Anda dijeda di debugger).

Dalam mode jeda, eksekusi aplikasi ditangguhkan sementara fungsi, variabel, dan objek tetap dalam memori. Ketika debugger berada dalam mode jeda, Anda dapat menjelajahi 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 Run To Cursor untuk memulai aplikasi dengan debugger terpasang dan masuk ke mode jeda. Kemudian Anda dapat menggunakan perintah langkah untuk menavigasi kode.

    Animasi yang memperlihatkan pemilihan Jalankan Ke Kursor lalu F11.

    Animasi yang memperlihatkan pemilihan Jalankan Ke Kursor lalu F11.

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

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

  • Perintah penjejakan kode umumnya digunakan dalam mode jeda.

  • Beberapa perintah seperti Jalankan untuk mengklik hanya dapat digunakan saat dalam mode istirahat.

Mode debugging dan jeda

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 Anda berada dalam mode istirahat.

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

Catatan

Jika Anda memasuki 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 file simbol atau file sumber, Anda masih dapat men-debug instruksi assembly di jendela Pembongkaran.

Penelusuran Kode

Penelusuran kode mengacu pada menjalankan kode aplikasi Anda satu per satu, dengan debugger terpasang. 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 menelusuri kesalahan, gunakan Debug>Masuk ke, atau pilih F11.

Debugger melangkah melalui perintah kode, bukan baris fisik. Misalnya, klausa if 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 dalam fungsi yang paling berlapis. Misalnya, jika Anda menggunakan Step Into 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 Locals dan Watch untuk melihat nilai berubah. Anda juga dapat melacak tumpukan panggilan secara visual saat Anda menelusuri fungsi. (Hanya untuk Visual Studio Enterprise, lihat memetakan metode pada tumpukan panggilan saat debug.)

Menelusuri kode dan melewati beberapa fungsi

Anda mungkin tidak peduli terhadap suatu fungsi saat melakukan debugging. Atau Anda mungkin tahu beberapa kode berfungsi, seperti kode pustaka yang diuji dengan baik. Anda dapat menggunakan perintah berikut untuk melewati kode saat Anda melakukan penelusuran kode. Fungsi-fungsi tersebut masih berjalan, tetapi debugger melewatkannya.

Perintah keyboard Perintah Menu Debug Deskripsi
F10 Melangkahi Jika baris saat ini berisi panggilan fungsi, Step Over menjalankan kode lalu menangguhkan eksekusi pada baris pertama kode setelah fungsi yang disebut kembali.
Shift+F11 Melangkah Keluar Step Out terus menjalankan kode dan menangguhkan eksekusi saat fungsi saat ini kembali. Debugger melewati fungsi saat ini.

Pergi ke lokasi atau fungsi tertentu

Anda mungkin lebih suka langsung menuju lokasi atau fungsi tertentu ketika Anda tahu dengan tepat kode apa yang ingin Anda periksa atau jika Anda tahu di mana Anda ingin memulai debugging.

  • 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 memilih F9, pilih Debug>Ganti 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.

Cuplikan layar yang memperlihatkan cara mengatur titik henti.

Cuplikan layar yang memperlihatkan cara mengatur titik henti.

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:

    Cuplikan layar yang memperlihatkan dialog Titik Henti Fungsi Baru.

    Cuplikan layar yang memperlihatkan dialog Titik Henti Fungsi Baru.

  3. Pilih OK.

Jika fungsi di-overload atau berada di lebih dari satu namespace, Anda dapat memilih yang Anda inginkan di jendela Titik Henti:

Cuplikan layar yang memperlihatkan jendela breakpoint.

Cuplikan layar yang memperlihatkan jendela titik henti.

Untuk memilih titik henti fungsi dari tumpukan panggilan:

  1. Saat melakukan debug, buka jendela Call Stack dengan memilih Debug>Windows>Call Stack.

  2. Pada jendela Call Stack , klik kanan pada 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 menelusuri kesalahan.

Jalankan ke lokasi kursor

Untuk menjalankan kode ke lokasi kursor, pada kode sumber atau jendela Call Stack, pilih baris yang ingin Anda hentikan, kemudian klik kanan dan pilih Jalankan ke Kursor, atau pilih Ctrl+F10. Memilih Jalankan Ke Kursor mirip dengan mengatur titik henti sementara .

Paksa untuk menjalankan ke lokasi kursor

Untuk menjalankan ke posisi kursor, dalam kode sumber atau jendela Call Stack, pilih baris di mana Anda ingin berhenti, lalu klik kanan dan pilih Paksa Jalankan hingga 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 menggerakkan kursor mouse ke pernyataan dalam kode sumber atau jendela Pembongkaran dan memilih panah hijau Jalankan eksekusi hingga di sini. Menggunakan Run to Click mirip dengan menetapkan breakpoint sementara .

Cuplikan layar yang memperlihatkan fitur

Catatan

Jalankan ke Klik tersedia mulai dari Visual Studio 2017.

Paksa jalankan dengan mengklik

Saat debugger dijeda, Anda dapat menggerakkan mouse ke atas pernyataan dalam kode sumber sambil menekan tombol Shift, kemudian pilih Jalankan paksa eksekusi hingga di sini (ditandai dengan panah hijau ganda). Saat Anda memilih opsi ini, aplikasi menghubungkan debugger Visual Studio dan berhenti sejenak di lokasi kursor. Setiap titik henti dan pengecualian kesempatan pertama yang ditemukan selama eksekusi untuk sementara dinonaktifkan.

Cuplikan layar yang memperlihatkan Paksa Jalankan untuk Klik.

Catatan

Paksa Jalankan ke Klik tersedia mulai dari Visual Studio 2022.

Memecah kode secara manual

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

Debug kode non-pengguna

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

Untuk melihat kode kerangka kerja, kode pustaka pihak ketiga, atau panggilan sistem saat penelusuran kesalahan, Anda dapat menonaktifkan Just My Code. Di Tools (atau Debug) >Opsi>Debugging , kosongkan kotak centang Aktifkan Just My Code. Ketika Just My Code dinonaktifkan, kode non-pengguna muncul di jendela debugger, dan debugger dapat masuk ke kode non-pengguna.

Catatan

Just My Code tidak didukung untuk proyek perangkat keras.

Kode debug sistem

Jika Anda telah memuat simbol penelusuran kesalahan untuk kode sistem Microsoft dan menonaktifkan Just My Code, Anda dapat memasuki 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 debugging.

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

Untuk memuat simbol untuk komponen sistem tertentu:

  1. Saat Anda melakukan debug, buka jendela Modul dengan memilih Debug>Jendela>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.

Mendalami properti dan operator dalam kode terkelola

Debugger secara default melewati properti dan operator dalam kode terkelola. Dalam kebanyakan kasus, perilaku ini memberikan pengalaman pemecahan kesalahan yang lebih baik. Untuk mengaktifkan langkah ke properti atau operator, pilih Debug>Opsi. Pada halaman Debugging> Umum, kosongkan kotak centang Langkah atas properti dan operator (Hanya terkelola).

Memindahkan penunjuk untuk mengubah alur eksekusi

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

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