Di Java / C # Anda dapat dengan mudah melangkah melalui kode untuk melacak apa yang mungkin salah, dan IDE membuat proses ini sangat user friendly.
Bisakah Anda melacak melalui kode python dengan cara yang sama?
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, gunakanpython -m pdb your_script.py
.pdb
perintahnya adalah bagian daripython
paket. Bagaimanapun,python -m <module>
menjadi standar untuk hal-hal lain juga sepertipip
, jadi mungkin yang terbaik untuk menggunakannya secara default.Dengan menggunakan Python Interactive Debugger 'pdb'
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
B. Dalam Penerjemah
Sambil mengembangkan versi awal modul dan bereksperimen lebih iteratif.
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:
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://pymotw.com/2/pdb/
https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/
sumber
Ada modul yang disebut 'pdb' dengan python. Di bagian atas skrip python Anda, Anda lakukan
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'.
sumber
Mulai dengan Python 3.7, Anda bisa menggunakan
breakpoint()
fungsi bawaan untuk masuk ke debugger:Secara default,
breakpoint()
akan mengimporpdb
dan meneleponpdb.set_trace()
. Namun, Anda dapat mengontrol perilaku debug melaluisys.breakpointhook()
dan penggunaan variabel lingkunganPYTHONBREAKPOINT
.Lihat PEP 553 untuk informasi lebih lanjut.
sumber
breakpoint
saya sangat bersemangat. Tapi kemudian saya belajar bahwa itu pada dasarnya hanya jalan pintasimport 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 (debugger IPython)
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:dan kemudian tambahkan ke baris yang Anda ingin langkah debug:
Anda mungkin ingin menambahkan pintasan untuk itu dari editor Anda, misalnya untuk Vim snipmate yang saya miliki:
jadi saya bisa mengetik adil
ipd<tab>
dan itu memperluas ke breakpoint. Maka menghapusnya dengan mudahdd
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:
tetapi Anda biasanya tidak ingin melakukannya karena:
Atau sebagai alternatif, seperti pada pdb 3.2+, Anda dapat mengatur beberapa breakpoint dari baris perintah:
meskipun
-c c
rusak karena beberapa alasan: https://github.com/gotcha/ipdb/issues/156python -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: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.
sumber
Ada
breakpoint()
metode saat ini, yang menggantikanimport pdb; pdb.set_trace()
.Ini juga memiliki beberapa fitur baru , seperti variabel lingkungan yang mungkin.
sumber
Jika Anda berasal dari latar belakang Java / C #, saya kira taruhan terbaik Anda adalah menggunakan Eclipse dengan Pydev . Ini memberi Anda IDE yang berfungsi penuh dengan debugger bawaan. Saya juga menggunakannya dengan Django.
sumber
Jika Anda menginginkan IDE dengan debugger terintegrasi, coba PyScripter .
sumber
https://wiki.python.org/moin/PythonDebuggingTools
pudb adalah pengganti drop-in yang baik untuk pdb
sumber
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
danio.BytesIO
sebagai gantinya: demosumber
Secara pemrograman, melangkah dan menelusuri kode python juga dimungkinkan (dan mudah!). Lihatlah dokumentasi sys.settrace () untuk lebih jelasnya. Juga di sini adalah tutorial untuk memulai.
sumber
Visual Studio dengan PTVS bisa menjadi pilihan untuk Anda: http://www.hanselman.com/blog/OneOfMicrosoftsBestKeptSecretsPythonToolsForVisualStudioPTVS.aspx
sumber
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.
sumber