Debugger membantu mengamati program saat berjalan. Kamu dapat berhenti sebelum suatu baris dijalankan, memeriksa variabel, lalu membandingkan keadaan sebenarnya dengan hasil yang seharusnya terjadi.

Tujuan Penggunaan

Gunakan lampiran ini ketika traceback saja belum cukup atau ketika program berjalan tanpa exception tetapi hasilnya salah. Kamu akan menelusuri masalah indeks dan kondisi perulangan, lalu memeriksa perbaikannya.

Persiapan

Siapkan VS Code dan Python Debugger sesuai Lampiran 4, lalu pelajari list serta exception pada Bab 12 dan 15. Tombol IDE pada contoh membantu menguji hasil; panel breakpoint dan Watch dipraktikkan di VS Code desktop. Contoh sengaja bermasalah diberi penjelasan agar tidak dianggap solusi.

Panduan dan Contoh

Menyiapkan sesi dan membaca panel

Gunakan folder proyek dan interpreter yang sudah disiapkan pada Lampiran 4. Konfigurasi .vscode/launch.json tersedia di bagian Menjalankan debugger dan membaca masalah pada lampiran tersebut. Jika memakai folder baru, salin konfigurasi itu ke folder proyek, lalu buka file Python yang akan diperiksa.

Klik area di sebelah nomor baris untuk menambah breakpoint, lalu pilih konfigurasi Python: File Aktif pada Run and Debug. Eksekusi berhenti sebelum baris breakpoint dijalankan.

Kontrol Pintasan Windows Fungsi
Start/Continue F5 Mulai atau lanjut hingga berhenti lagi
Step Over F10 Jalankan satu langkah tanpa masuk fungsi
Step Into F11 Masuk ke fungsi yang dipanggil
Step Out Shift+F11 Lanjut sampai kembali ke pemanggil
Stop Shift+F5 Akhiri sesi
Toggle Breakpoint F9 Pasang atau hapus breakpoint

Keymap dapat berbeda; nama kontrol pada toolbar tetap menjadi acuan. Variables menampilkan nilai, Watch memantau ekspresi, dan Call Stack menunjukkan rangkaian pemanggilan yang aktif. Di Debug Console, evaluasi ekspresi saat sesi dijeda. Hindari perubahan nilai sebelum mencatat penyebab masalah agar pengamatan tidak membingungkan.

Contoh L05-01 – Mengamati indeks yang keliru

def ambil_data(data, indeks):
    return data[indeks]


angka = [10, 20, 30]
indeks_target = 3
print("Indeks:", indeks_target)
print("Panjang:", len(angka))
try:
    print(ambil_data(angka, indeks_target))
except IndexError:
    print("Indeks tidak tersedia")

Coba di IDE

Unduh Sumber

Hasil yang diharapkan:

Indeks: 3
Panjang: 3
Indeks tidak tersedia

Penjelasan: Program sengaja meminta indeks 3 pada list berisi tiga item. Exception ditangani agar hasil demonstrasi tetap jelas.

Coba ubah: Ganti indeks_target menjadi 2 dan periksa nilai 30.

  1. Pasang breakpoint pada return data[indeks] dan jalankan debugger.
  2. Periksa data dan indeks. List memiliki posisi 0, 1, dan 2.
  3. Di Watch, tambahkan len(data) dan indeks < len(data).
  4. Ganti indeks target menjadi 2, mulai ulang, lalu pastikan hasilnya 30.

Jika indeks berasal dari pengguna, tentukan dahulu apakah indeks negatif boleh dipakai. Untuk antarmuka yang hanya menerima posisi nonnegatif, validasi dengan 0 <= indeks < len(data). Jangan diam-diam mengubah setiap indeks keliru menjadi item terakhir.

Contoh L05-02 – Menemukan error logika

def jumlah_genap(angka):
    total = 0
    for nilai in angka:
        if nilai % 2 == 1:
            total += nilai
    return total


data = list(range(1, 11))
print(jumlah_genap(data))

Coba di IDE

Unduh Sumber

Hasil yang diharapkan:

25

Penjelasan: Kondisi sengaja memilih bilangan ganjil. Tujuan menjumlahkan bilangan genap seharusnya menghasilkan 30.

Coba ubah: Ubah pemeriksaan sisa bagi menjadi == 0, lalu uji lagi.

Pasang breakpoint pada baris if. Watch nilai, total, dan nilai % 2 == 0. Gunakan F10 beberapa kali sampai kembali ke kondisi loop; satu penekanan F10 tidak selalu berarti satu iterasi.

Saat berhenti sebelum if nilai total sebelum if Setelah blok salah
Iterasi pertama 1 0 1
Iterasi kedua 2 1 1
Iterasi ketiga 3 1 4

Dari pengamatan itu, program menambah nilai ganjil. Perbaiki kondisi, mulai ulang, dan pastikan hasilnya 30.

Breakpoint khusus

  • Conditional breakpoint: berhenti hanya jika ekspresi benar, misalnya nilai == 6 pada loop contoh.
  • Logpoint: tulis pesan seperti nilai={nilai}, total={total} tanpa menambahkan print() ke file; program terus berjalan.
  • Exception breakpoint: Raised Exceptions membantu memeriksa exception saat dilempar, termasuk yang kemudian ditangani. Uncaught Exceptions berfokus pada exception yang tidak tertangani.

Dengan justMyCode: true, langkah debugger berfokus pada code proyek. Atur false jika memang perlu menelusuri library. Debugger terminal bawaan pdb merupakan alat terpisah; perintah breakpoint() dapat memanggilnya saat program dijalankan di terminal biasa. Jangan menyamakan prompt pdb dengan panel debugger visual VS Code.

Memastikan perbaikan bertahan

Simpan masukan yang memunculkan masalah dan hasil yang diharapkan. Periksa pula data kosong dan batas indeks. Jika proyek membesar, pindahkan pemeriksaan tersebut ke pengujian otomatis agar kesalahan yang sama dapat terdeteksi setelah perubahan berikutnya.

Praktik Mandiri

L05-P01 – Perbaiki jumlah genap

Perbaiki kondisi pada jumlah_genap(). Uji data 1 sampai 10, list kosong, serta [0, 2, 3].

Kriteria selesai: Ketiga hasil berturut-turut 30, 0, dan 2.

Lihat Petunjuk

Angka genap memiliki sisa pembagian 2 bernilai 0. Fungsi harus tetap mengembalikan total setelah loop.

Lihat Solusi

Perbaikan mengubah kondisi pemilihan, bukan mengubah data uji agar cocok dengan hasil salah.

def jumlah_genap(angka):
    total = 0
    for nilai in angka:
        if nilai % 2 == 0:
            total += nilai
    return total


print(jumlah_genap(list(range(1, 11))))
print(jumlah_genap([]))
print(jumlah_genap([0, 2, 3]))
Coba Solusi di IDEUnduh Solusi

Rangkuman

Debugger menguji dugaan tentang alur program melalui keadaan nyata. Breakpoint, langkah eksekusi, dan Watch membantu menemukan penyebab. Perbaikan baru selesai setelah masukan penyebab masalah dan kasus tepi menghasilkan keluaran yang sesuai.

Referensi dan Materi Pendamping

Edisi September 2026. Contoh dan nomor praktik sesuai dengan buku.

FAQ | Lampiran 1 | Lampiran 2 | Lampiran 3 | Lampiran 4 | Lampiran 5 | Lampiran 6 | Lampiran 7