Python memiliki cukup banyak debugger namun yang cukup mudah yaitu penggunaan module yang dikenal dengan pdb (Python DeBugger). Namun sayang dibeberapa web diskusi mengenai penggunaan pdb tidak bermamfaat bagi python newbie, kebanyakan hanya memberikan penjelasan singkat dan hanya mengulang kembali penjelasan tentang pdb yang terdapat pada manual library python.
Oleh karena itu pada page ini gue bakal coba jelaskan cara penggunaan pdb untuk melakukan debugger pada pemrograman python, dimana gue mengasumsikan kita tidak sedang menggunakan IDE apapun, yang berarti kita melakukan coding python menggunakan tex editor dan menjalankan program python dengan menggunakan command line.
Langkah awal -- pdb.set_trace()
Untuk permulaan gue akan mencontohkan cara mudah penggunaan Python debugger.1. Kita akan membuat program sederhana dengan python yang diberinama pdb1.py
# pdb1.py -- belajar menggunakan Python debugger
a = "saya"
b = "belajar"
c = "debug"
kalimat = a + b + c
print kalimat
2. Letakkan statement berikut pada baris pertama kode program Python yang telah dibuat tadi. Perintah ini kana meng-import module Python debugger, pdb.
import pdb3. Sekarang tentukan tempat dimana kita akan mulai melakukan debug atau tracing dengan menambahkan kode berikut.
pdb.set_trace()
Maka program kita sekarang akan berbentuk seperti ini.
# pdb1.py -- belajar menggunakan Python debugger4. Sekarang jalankan program yang telah dibuat tadi dengan menggunakan command line.
import pdb
a = "saya"
pdb.set_trace()
b = "belajar"
c = "debug"
kalimat = a + b + c
print kalimat
PROMT> python pdb1.pyKetika program mengeksekusi perintah pdb.set_trace() maka debugger akan dilakukan. Maka eksekusi program akan (1) berhenti (2) menampilkan "statement terakhir" dan (3) menunggu input dari user. Pada saat melakukan debung dengan pdb maka kita akan menemukan pdb prompt seperti ini:
(Pdb)
Eksekusi perintah berikutnya menggunakan "n" (next)
Pada prompt (Pdb) tekan huruf "n" (next) pada keyboard lalu tekan ENTER. Perintah tersebut akan memberikan intruksi kepada pdb untuk mengeksekusi perintah berikutnya, untuk selanjutnya kita tidak perlu lagi menekan "n" cukup dengan menekan ENTER saja untuk mengeksekusi perintah berikutnya, karena pdb akan mengingat input terakhir yang diberikan user.Lakukan terus sampai pdb mengeksekusi baris terakhir program yang telah dibuat dan dengan sendirinya program akan berhenti kembali ke command prompt awal. Sampai disini berarti kita telah berhasil melakukan debugging pertama terhadap program kita.
Mengulangi perintah debugging terakhir dengan ENTER
Kali ini kita akan melakukan hal yang sama persis dengan yang kita lakukan sebelumnya. Jalankan program, pada pdb prompt tekan "n" (next) pada keyboard dan diikuti dengan ENTER.Namun kali ini, kita hanya menekan "n" sekali saja, untuk berikutnya kita tidak akan menginput huruf "n", cukup dengan menekan ENTER saja. Disini kita akan melihat pdb akan terus berjalan melakukan debug terhadap program kita sama seperti kita menekan tombol "n", jadi kita tidak perlu menginput "n" untuk melanjutkan debugging.
Jika kita menekan ENTER tanpa menginput apapun, pdb akan mengeksekusi kembali command terakhir yang telah kita input sebelumnya.Pada kasus ini, command terakhir yang kita input adalah "n", jadi kita dapat terus meng-eksekusi program hanya dengan menekan ENTER.
Berhenti melakukan debuggin dengan menekan "q" (quit)
Ketika program debungging berjalan kita dapat melakukan terminasi pada proses debungging tersebut dengan memberikan input "q" (quit) dan menekan ENTER, maka ketika inpit eksekusi proses debugging akan berhenti.Menampilakan value dari variable dengan "p" (print)
Perintah yang sangat berguna ketika kita melakukan debugging dengan pdb adalah mencetak nilai yang terdapat dalam sebuah variabel. Untuk melakukannya maka pada (Pdb) prompt kita ketikkan "p" diikuti dengan nama variable yang ingin kita tampilkan diikuti dengan menekan ENTER.Kita dapat menampilkan nilai dari banyak variable sekaligus dengan mimisahkan nama variable menggunakan commas. Sebagai contoh, kita dapat menampilkan value dari variable a, b, dan c dengan cara:
p a, b, c
Kapan pdb menampilkan baris?
Ketika kita telah hampir sampai pada akhir baris program kita maka kita akan mendapati baris program kita yang berisikanfinal = a + b + cdan kita memberikan pdb command
p finalMaka kita akan mendapati NameError exception. Ini disebabkan karena baris tersebut belum dieksekusi. Jadi variable final belum dibuat.
Sekarang tekan "n" dan ENTER untuk mengeksekusi baris program tersebut, lalu kemudian ketik kembali perintah "p final". Maka kali ini pdb akan menampilkan value dari variable final.
Turning off (Pdb) promt dengan "c" (continue)
Sebelumnya kita telah menggunakan perintah "q" untuk keluar dari pdb dengan cara yang kasar yaitu dengan cara membuat program seolah-olah crash.Jika kita ingin menghentikan proses debugging namun dengan tetap membiarkan program tetap menyelesaikan eksekusi seluruh baris perintahnya maka kita dapat menggunakan "c" (continue).
Mengecek posisi kita dengan "l" (list)
Ketika melakukan debugging maka akan sangat banyak sekali code dan perintah dari program yang ditampilkan pada console kita sehingga menyebabkan kita akan kesulitan untuk mengetahui sekarang kita sedang berada di baris keberapa pada program yang sedang kita debug. Untuk mengetahui posisi kita pada baris program kita dapat menggunakan perintah "l" (list).Perintah "l" akan memberitahukan kita area dari baris program yang sedang kita eksekusi. Secara default akan menampilkan 11 baris kode, yang merupakan baris program yang sedang kita eksekusi dan akan terdapat tanda panah "->" yang menandakan posisi debug kita saat ini.
Masuk kedalam subrutine dengan perintah "s" (step into)
Ketika kita ingin melakukan debug terhadap suatu program yang memiliki baris code yang banyak dan terdiri dari beberapa subrutine, seperti pada program berikut# pdb2.py -- belajar menggunakan Python debuggerKetika kita melakukan debug dengan menggunakan cperintah "n" pada (Pdb) prompt, ketika kita mengeksekusi baris program yang memanggil sebagai contoh perintah subrutine -- kalimat = combine(a, b) -- maka pdb akan memperlakukannya sama dengan statement-statement yang lain. Statement tersebut akan di eksekusi dan kita akan berpindah kestatement berikutnya pada kasus ini kita akan mengeksekusi print kalimat.
import pdb
def combine(s1,s2): # define subroutine combine
s3 = s1 + s2 + s1
s3 = '"' + s3 +'"'
return s3 # returns it.
a = "saya"
pdb.set_trace()
b = "belajar"
c = "debug"
kalimat = combine(a, b)
print kalimat
Jika didalam subroutine kita tidak terdapat masalah maka itu tidak akan menjadi masalah, namun bagaimana jika didalam subroutine tersebut terdapat permasalahan seperti kesalahan logika, maka kita tidak dapat mengetahuinya karena kita tidak melakukan debug terhadap subroutine tersebut.
Untuk melakukan debug terhadapa subroutine kita dapat menggunakan perintah "s" (step into), ketika kita mengeksekusi baris program yang tidak memiliki subroutin maka perintah "n" dan "s" akan melakukan hal yang sama, yakni mengeksekusi baris program berikutnya.
Ketika kita mengeksekusi
kalimat = combine(a, b)menggunakan command "s" maka pdb akan menampilkan statement pertama yang terdapat didalam subroutine combine:
def combine(s1, s2):
Menuju perintah terakhir pada subroutine dengan "r" (return)
Ketika kita menggunakan command "s" untuk memasuki sebuah subroutine, maka kita hanya akan berputar-putar didalam subroutine tersebut. Kita mestinya melakukan debug terhadap kode tertentu yang kita anggap kritikal.Pada kondisi ini yang harus kita lakukan adalah menuju kebagian akhir dari sebuah subroutine, kita membutuhkan command yang bekerja seperti command "c" (continue), namun yang kita inginkan hanya bekerja didalam subroutine sedang kan command "c" akan mengakhiri program.
Kita dapat melakukannya dengan menggunakan command "r" (return), ketika kita berada pada sebuah subroutine dan mengeksekusi command "r" pada (Pdb) prompt, pdb akan melakukan eksekusi sampai baris program terakhir pada subroutine tersebut.
Kita dapat melakukan apapun pada (Pdb) prompt
Terkadang kita berada pada situsi seperti ini -- Kita beranggapan bahwa kita telah menemukan sebuah permasalahan. Sebuah statement yang mengisiasi value "aaa" kevariabel var1 salah dan menyebabkan program kita tidak berjalan baik, dimana seharusnya ia mengisiasi value "bbb" kedalam var1.Setelah kita melakukan perubahan pada baris program kita, kita melakukan eksekusi dan program kita berjalan dengan baik tanpa kesalahan.
Salah satu kehandalan dari (Pdb) prompt yakni kita dapat melakukan apapun disana, kita dapat menginput commad apapun pada (Pdb) prompt. Jadi kita secara langsung dapat menginput commad pada (Pdb) prompt
(Pdb) var1 = "bbb"Kita kemudian dapat melakukan debugging tanpa harus merubah pada source codenya terlebih dahulu.
Berhati-hatilah !
Kita memang dapat melakukan apapun pada (Pdb) prompt, kita mungkin memutuskan untuk mencoba melakukan setting terhadap variable "b" dengan memberikan value yang baru katakan saja "BBB" dengan cara
(Pdb) b = "BBB"Jika kita melakukan hal demikian maka pdb akan menghasilkan error message bahwa tidak dapat menemukan object named '= "BBB"', kenapa hal ini bisa terjadi?
Lantas bagaimana cara kita untuk meng-assign value baru kedala variable "b"? Trik yang dapat kita gunakan yaitu memasukkan command dengan menggunakan exclamation point (!).
(Pdb) !b = "BBB"Exclamation point akan memberitahu pdb bahwa inputan tersebut merupakan Python statement, bukan merupakan commad pdb.
No comments :
Post a Comment
Leave a Comment...