Python Debugger:Tingkatkan Keterampilan Debug Anda dengan Mudah
Men-debug kode Python, bagi banyak dari kita, turun untuk menambahkan pernyataan cetak dan mencoba menjelaskan apa yang terjadi berdasarkan output. Ini tidak ideal, tetapi untuk beberapa alasan, orang tidak ingin menyentuh debugger Python.
Daftar isi
Menggunakan print untuk men-debug kode
Jika Anda salah satu dari orang-orang yang menggunakan print untuk debugging, Saya tidak menghakimi Anda . Belajar Python itu sulit. Pemrograman itu sulit. Hidup itu sulit. Saya mengerti bahwa mempelajari hal lain tampaknya melelahkan jika Anda sudah berjuang. Dan menambahkan pernyataan cetak itu ke kode Anda… itu lebih mudah. Sedikit pengakuan:Saya masih melakukannya sepanjang waktu juga. Ini tidak seburuk kelihatannya.
Karena itu, saya akan mengajari Anda sedikit trik yang semudah menambahkan pernyataan cetak ke kode Anda. Namun, trik ini memberi Anda kekuatan debug tak terbatas dan memungkinkan Anda menaklukkan dunia, jika perlu.
Menyetel breakpoint debugger Python
Anda tidak memerlukan IDE untuk men-debug kode Anda dengan benar. Trik ini selalu berhasil, bahkan di editor paling sederhana, dan bahkan di Jupyter Notebooks.
Triknya sampai pada ini:menyetel apa yang disebut breakpoint menggunakan instruksi breakpoint() . Anda dapat memasukkannya ke dalam kode Anda, apa pun editor atau IDE yang Anda gunakan, pada titik di mana Anda biasanya memasukkan pernyataan cetak yang mengganggu itu.
Jadi apa yang terjadi ketika Anda melakukannya? Mari kita cari tahu! Buat program sederhana, seperti di bawah ini:
def add_two(x):
return x + 2
for i in range(1, 10):
a = add_two(i)
breakpoint()
print(a)
Saat Anda menjalankan ini, dan tidak masalah jika Anda melakukannya di REPL, dari baris perintah, atau di IDE Anda, Anda akan dimasukkan ke dalam debugger Python yang disebut PDB. Tapi sekarang apa?
Menggunakan debugger Python
Ketika saya memulai program kecil di atas, inilah yang terjadi:
Ini menunjukkan file saat ini yang dimulai (breakpointing.py )
Setelah itu, muncul perintah berikutnya yang akan dijalankan, tetapi terputus oleh panggilan ke breakpoint() .
Dan akhirnya, kita melihat perintah pdb, menunggu masukan kita.
Debugger Python sebenarnya adalah shell Python yang berfungsi penuh, sama seperti REPL.
Pada titik ini, kita dapat memeriksa lingkungan saat ini. Mari kita lihat apa nilai a sekarang:
(Pdb) print(a)
3
(Pdb) print(i)
1
Alih-alih mencetak, Anda juga dapat menggunakan perintah pdb khusus, seperti ini:
(Pdb) p a
3
(Pdb_ p i
1
Menjalankan baris berikutnya
Jadi bagaimana jika kita ingin menjalankan baris kode berikutnya? Ada dua opsi:
Dengan s atau step , Anda menjalankan baris saat ini. Debugger berhenti pada kesempatan pertama setelah itu.
Dengan n atau next , Anda juga mengeksekusi baris saat ini, tetapi sekarang debugger terus berjalan hingga baris berikutnya dari fungsi saat ini tercapai.
Untuk membuatnya lebih jelas:step dengan senang hati memasuki panggilan fungsi dan masuk ke dalam fungsi itu. Sebaliknya, next mengeksekusi fungsi hingga kembali, dan berhenti pada baris berikutnya.
Debugger dan IDE lain juga menyebut ini 'langkah ke' (bukan langkah) dan 'langkahi' (bukan berikutnya).
Sekarang mari kita gunakan keduanya:
$ python3 breakpointing.py
-> print(a)
(Pdb) s
3
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) n
-> breakpoint()
(Pdb) n
-> print(a)
(Pdb) n
4
-> for i in range(1, 10):
(Pdb) s
-> a = add_two(i)
(Pdb) s
--Call--
-> def add_two(x):
(Pdb) s
-> return x + 2
(Pdb) s
--Return--
5
-> return x + 2
(Pdb) s
-> breakpoint()
(Pdb)
Seperti yang Anda lihat, pertama-tama kita lakukan panggilan ke add_two dengan n . Kedua kalinya, kita masuk ke fungsi dengan s .
Perintah debugger Python
Ada lebih banyak perintah yang dapat Anda coba sendiri. Saya tidak akan mencantumkan semuanya, hanya yang paling berguna:
h (bantuan):mencetak semua perintah yang tersedia. Juga mengambil argumen, mis. h c memberitahu Anda apa c perintah tidak
c (lanjutkan):mulai berlari hingga breakpoint berikutnya
l (daftar):cantumkan kode sumber di sekitar baris saat ini
p :mencetak hasil dari ekspresi berikut. Anda dapat menggunakan ini alih-alih memanggil print()
pp :pretty print, berguna untuk mencetak struktur data seperti kamus
mulai ulang:mulai ulang program saat ini
Untuk dokumentasi lengkap, buka halaman debugger Python, di mana semua perintah terdaftar.
Terus belajar
Meskipun ini bisa sangat berguna, ada baiknya untuk menyelami debugger yang ditawarkan IDE Anda. Jika Anda pengguna VSCode, saya menulis tutorial tentang cara men-debug kode Python di VSCode.