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")
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.
- Pasang breakpoint pada
return data[indeks]dan jalankan debugger. - Periksa
datadanindeks. List memiliki posisi 0, 1, dan 2. - Di Watch, tambahkan
len(data)danindeks < len(data). - 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))
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 == 6pada loop contoh. - Logpoint: tulis pesan seperti
nilai={nilai}, total={total}tanpa menambahkanprint()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 SolusiRangkuman
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
