Debugging Aplikasi Thread
Dalam bab ini, kita akan mempelajari cara men-debug aplikasi thread. Kami juga akan mempelajari pentingnya debugging.
Apa itu Debugging?
Dalam pemrograman komputer, debugging adalah proses menemukan dan menghilangkan bug, kesalahan, dan kelainan dari program komputer. Proses ini dimulai segera setelah kode ditulis dan berlanjut secara berurutan saat kode digabungkan dengan unit pemrograman lain untuk membentuk produk perangkat lunak. Debugging adalah bagian dari proses pengujian perangkat lunak dan merupakan bagian integral dari seluruh siklus hidup pengembangan perangkat lunak.
Python Debugger
Debugger Python atau pdbadalah bagian dari pustaka standar Python. Ini adalah alat cadangan yang bagus untuk melacak bug yang sulit ditemukan dan memungkinkan kami memperbaiki kode yang salah dengan cepat dan andal. Berikut adalah dua tugas terpenting daripdp debugger -
- Ini memungkinkan kita untuk memeriksa nilai variabel saat runtime.
- Kita dapat melangkah melalui kode dan mengatur breakpoint juga.
Kami dapat bekerja dengan pdb dalam dua cara berikut -
- Melalui baris perintah; ini juga disebut debugging postmortem.
- Dengan menjalankan pdb secara interaktif.
Bekerja dengan pdb
Untuk bekerja dengan debugger Python, kita perlu menggunakan kode berikut di lokasi tempat kita ingin masuk ke debugger -
import pdb;
pdb.set_trace()
Pertimbangkan perintah berikut untuk bekerja dengan pdb melalui baris perintah.
- h(help)
- d(down)
- u(up)
- b(break)
- cl(clear)
- l(list))
- n(next))
- c(continue)
- s(step)
- r(return))
- b(break)
Berikut adalah demo dari perintah h (help) dari debugger Python -
import pdb
pdb.set_trace()
--Call--
>d:\programdata\lib\site-packages\ipython\core\displayhook.py(247)__call__()
-> def __call__(self, result = None):
(Pdb) h
Documented commands (type help <topic>):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
Contoh
Saat bekerja dengan debugger Python, kita dapat mengatur breakpoint di mana saja dalam skrip dengan menggunakan baris berikut -
import pdb;
pdb.set_trace()
Setelah mengatur breakpoint, kita dapat menjalankan script secara normal. Skrip akan dieksekusi hingga titik tertentu; sampai garis telah ditetapkan. Pertimbangkan contoh berikut di mana kita akan menjalankan skrip dengan menggunakan baris yang disebutkan di atas di berbagai tempat di skrip -
import pdb;
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print (final)
Ketika skrip di atas dijalankan, ia akan menjalankan program sampai a = "aaa", kita dapat memeriksanya pada output berikut.
Keluaran
--Return--
> <ipython-input-7-8a7d1b5cc854>(3)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
*** NameError: name 'b' is not defined
(Pdb) p c
*** NameError: name 'c' is not defined
Setelah menggunakan perintah 'p (print)' pada pdb, skrip ini hanya mencetak 'aaa'. Ini diikuti oleh kesalahan karena kami telah menetapkan breakpoint hingga a = "aaa".
Demikian pula, kita dapat menjalankan skrip dengan mengubah breakpoint dan melihat perbedaan dalam output -
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
pdb.set_trace()
final = a + b + c
print (final)
Keluaran
--Return--
> <ipython-input-9-a59ef5caf723>(5)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
*** NameError: name 'final' is not defined
(Pdb) exit
Dalam skrip berikut, kami mengatur breakpoint di baris terakhir program -
import pdb
a = "aaa"
b = "bbb"
c = "ccc"
final = a + b + c
pdb.set_trace()
print (final)
Outputnya adalah sebagai berikut -
--Return--
> <ipython-input-11-8019b029997d>(6)<module>()->None
-> pdb.set_trace()
(Pdb) p a
'aaa'
(Pdb) p b
'bbb'
(Pdb) p c
'ccc'
(Pdb) p final
'aaabbbccc'
(Pdb)