Jawaban:
Iya! Ada debugger Python yang dipanggil pdb
hanya untuk melakukan itu!
Anda dapat meluncurkan program Python melalui pdb
dengan menggunakan pdb myscript.py
atau python -m pdb myscript.py
.
Ada beberapa perintah yang bisa Anda keluarkan, yang didokumentasikan di pdb
halaman.
Beberapa yang berguna untuk diingat adalah:
b
: atur breakpointc
: lanjutkan debugging hingga Anda mencapai breakpoints
: melangkah melalui koden
: untuk pergi ke baris kode berikutnyal
: daftar kode sumber untuk file saat ini (default: 11 baris termasuk baris yang sedang dieksekusi)u
: menavigasi bingkai tumpukand
: menavigasi ke bawah bingkai tumpukanp
: untuk mencetak nilai ekspresi dalam konteks saat iniJika Anda tidak ingin menggunakan debugger baris perintah, beberapa IDE seperti Pydev , Wing IDE atau PyCharm memiliki debugger GUI. Wing dan PyCharm adalah produk komersial, tetapi Wing memiliki edisi "Pribadi" gratis, dan PyCharm memiliki edisi komunitas gratis.
pudb
bagus untuk itu. Jugapydev
pdb
bukan alat baris perintah. Untuk menggunakannya, gunakan python -m pdb your_script.py
.
pdb
perintahnya adalah bagian dari python
paket. Bagaimanapun, python -m <module>
menjadi standar untuk hal-hal lain juga seperti pip
, jadi mungkin yang terbaik untuk menggunakannya secara default.
Langkah pertama adalah membuat juru bahasa Python untuk masuk ke mode debugging.
A. Dari Baris Perintah
Cara paling lurus ke depan, berjalan dari baris perintah, dari juru bahasa python
$ python -m pdb scriptName.py
> .../pdb_script.py(7)<module>()
-> """
(Pdb)
B. Dalam Penerjemah
Sambil mengembangkan versi awal modul dan bereksperimen lebih iteratif.
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb_script
>>> import pdb
>>> pdb.run('pdb_script.MyObj(5).go()')
> <string>(1)<module>()
(Pdb)
C. Dari Dalam Program Anda
Untuk proyek besar dan modul yang berjalan lama, dapat memulai debug dari dalam program menggunakan impor pdb dan set_trace () seperti ini:
#!/usr/bin/env python
# encoding: utf-8
#
import pdb
class MyObj(object):
count = 5
def __init__(self):
self.count= 9
def go(self):
for i in range(self.count):
pdb.set_trace()
print i
return
if __name__ == '__main__':
MyObj(5).go()
Langkah demi langkah debugging untuk masuk ke lebih internal
Jalankan pernyataan berikutnya ... dengan "n" (berikutnya)
Mengulangi perintah debugging terakhir ... dengan ENTER
Berhenti semuanya ... dengan "q" (berhenti)
Mencetak nilai variabel ... dengan "p" (cetak)
a) pa
Mematikan konfirmasi (Pdb)… dengan “c” (lanjutan)
Melihat di mana Anda berada ... dengan "l" (daftar)
Melangkah ke subrutin ... dengan "s" (melangkah ke)
Melanjutkan ... tetapi hanya sampai akhir subrutin saat ini ... dengan "r" (kembali)
Tetapkan nilai baru
a) ! b = "B"
Atur breakpoint
Sebuah) potong linenumber
b) hancurkan functionname
c) hancurkan nama file: linenumber
Breakpoint sementara
a) kain linen kasar
Breakpoint bersyarat
a) istirahat linenumber, kondisi
Catatan: ** Semua perintah ini harus dijalankan dari ** pdb
Untuk pengetahuan mendalam, lihat: -
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
Ada modul yang disebut 'pdb' dengan python. Di bagian atas skrip python Anda, Anda lakukan
import pdb
pdb.set_trace()
dan Anda akan masuk ke mode debugging. Anda dapat menggunakan 's' untuk langkah, 'n' untuk mengikuti baris berikutnya mirip dengan apa yang akan Anda lakukan dengan debugger 'gdb'.
Mulai dengan Python 3.7, Anda bisa menggunakan breakpoint()
fungsi bawaan untuk masuk ke debugger:
foo()
breakpoint() # drop into the debugger at this point
bar()
Secara default, breakpoint()
akan mengimpor pdb
dan menelepon pdb.set_trace()
. Namun, Anda dapat mengontrol perilaku debug melalui sys.breakpointhook()
dan penggunaan variabel lingkunganPYTHONBREAKPOINT
.
Lihat PEP 553 untuk informasi lebih lanjut.
breakpoint
saya sangat bersemangat. Tapi kemudian saya belajar bahwa itu pada dasarnya hanya jalan pintas import pdb; pdb.set_trace()
dan itu membuat saya sedih. Python devs: harap fokus pada peningkatan PDB dengan fitur GDB dasar seperti baris konteks, riwayat perintah persisten dan penyelesaian otomatis tab :-)
ipdb menambahkan fungsionalitas IPython ke pdb, menawarkan peningkatan BESAR berikut:
Sama seperti pdg, ipdb masih jauh dari sempurna dan benar-benar belum sempurna jika dibandingkan dengan GDB, tetapi ini sudah merupakan peningkatan besar dibandingkan pdb.
Penggunaannya analog dengan pdb
, cukup instal dengan:
python3 -m pip install --user ipdb
dan kemudian tambahkan ke baris yang Anda ingin langkah debug:
__import__('ipdb').set_trace(context=21)
Anda mungkin ingin menambahkan pintasan untuk itu dari editor Anda, misalnya untuk Vim snipmate yang saya miliki:
snippet ipd
__import__('ipdb').set_trace(context=21)
jadi saya bisa mengetik adil ipd<tab>
dan itu memperluas ke breakpoint. Maka menghapusnya dengan mudah dd
karena semuanya terkandung dalam satu baris.
context=21
meningkatkan jumlah baris konteks seperti yang dijelaskan di: Bagaimana saya bisa membuat ipdb menampilkan lebih banyak baris konteks saat debugging?
Atau, Anda juga dapat men-debug program dari awal dengan:
ipdb3 main.py
tetapi Anda biasanya tidak ingin melakukannya karena:
Atau sebagai alternatif, seperti pada pdb 3.2+, Anda dapat mengatur beberapa breakpoint dari baris perintah:
ipdb3 -c 'b 12' -c 'b myfunc' ~/test/a.py
meskipun -c c
rusak karena beberapa alasan: https://github.com/gotcha/ipdb/issues/156
python -m module
debugging telah ditanyakan di: Bagaimana cara debug modul Python dijalankan dengan python -m dari baris perintah? dan karena Python 3.7 dapat dilakukan dengan:
python -m pdb -m my_module
Fitur hilang yang serius dari pdb dan ipdb dibandingkan dengan GDB:
gangguan khusus ipdb:
Diuji di Ubuntu 16.04, ipdb == 0.11, Python 3.5.2.
Ada breakpoint()
metode saat ini, yang menggantikan import pdb; pdb.set_trace()
.
Ini juga memiliki beberapa fitur baru , seperti variabel lingkungan yang mungkin.
Jika Anda menginginkan IDE dengan debugger terintegrasi, coba PyScripter .
https://wiki.python.org/moin/PythonDebuggingTools
pudb adalah pengganti drop-in yang baik untuk pdb
Python Tutor adalah debugger satu langkah online yang ditujukan untuk pemula. Anda dapat memasukkan kode pada hasil edit halaman lalu klik "Visualisasikan Eksekusi" untuk mulai menjalankannya.
Antara lain, mendukung:
Namun itu juga tidak mendukung banyak hal , misalnya:
io.StringIO
dan io.BytesIO
sebagai gantinya: demoSecara pemrograman, melangkah dan menelusuri kode python juga dimungkinkan (dan mudah!). Lihatlah dokumentasi sys.settrace () untuk lebih jelasnya. Juga di sini adalah tutorial untuk memulai.
Visual Studio dengan PTVS bisa menjadi pilihan untuk Anda: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
PyCharm adalah IDE untuk Python yang menyertakan debugger. Tonton video YouTube ini untuk pengantar tentang penggunaan debugger PyCharm untuk menelusuri kode.
PyCharm Tutorial - Debug kode python menggunakan PyCharm
Catatan: Ini tidak dimaksudkan sebagai dukungan atau ulasan. PyCharm adalah produk komersial yang harus dibayar, tetapi perusahaan memang memberikan lisensi gratis kepada siswa dan guru, serta versi Komunitas "ringan" yang gratis dan open-source.