Hanya pertanyaan kenyamanan. Saya telah sedikit dimanjakan dengan debugger di IDE seperti Visual Studio dan XCode. Saya merasa agak canggung harus mengetik import pdb; pdb.set_trace()
untuk menetapkan breakpoint (saya lebih suka tidak mengimpor pdb di bagian atas file karena saya mungkin lupa dan membiarkannya masuk).
Apakah ada cara yang lebih sederhana untuk menyetel breakpoint dalam kode Python, sesederhana dan sesederhana apa yang Anda lihat di IDE?
python -m pdb <your_script>.py
lalub <line_number>
untuk menyetel breakpoint pada nomor baris yang dipilih (tanpa tanda kurung fungsi). Tekanc
untuk melanjutkan ke breakpoint Anda. Anda dapat melihat semua breakpoint Anda menggunakanb
perintah itu sendiri. Ketikhelp
untuk melihat perintah pdb lain yang tersedia saat debugging.breakpoint()
fungsi bawaan . python.org/dev/peps/pep-0553Jawaban:
Anda dapat menjalankan program Anda
pdb
dari baris perintah dengan menjalankanIni akan rusak pada baris pertama, kemudian Anda akan dapat menambahkan titik putus di mana pun Anda inginkan dalam kode Anda menggunakan
break
perintah, sintaksnya adalah:Ini cukup fleksibel untuk memberi Anda kemampuan untuk menambahkan breakpoint di mana saja.
sumber
pdb.set_trace()
dan masuk ke debugger, gunakanl
perintah (daftar) dan lihat bahwa saya ingin menetapkan breakpoint pada baris 27, saya kemudian akan masuk:b 27
dan debugger akan menetapkan breakpoint pada baris 27 (saya menemukan dokumentasinya sedikit menantang untuk dipahami, jadi ingin menambahkan poin klarifikasi itu).x
, dan Anda ingin berhenti ketika metodenyaf
dipanggil, Anda dapat mengucapkanbreak x.f
, laluc(ontinue)
. Ini berfungsi bahkan jika objek tersebut berada dalam file yang tidak dapat diakses atau dibuat secara dinamis, misalnya dengan menghapus centang.b /data/users/me/project/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py:596
Kamu bisa memakai:
sumber
set_trace
hanya ketika saya menggunakan bp ()?Di vim, saya memiliki pengaturan makro untuk ini (di file .vimrc saya):
jadi saya cukup menekan \ b (bila tidak dalam Mode Sisipkan) dan menambahkan breakpoint setelah baris saat ini, atau \ B (perhatikan ibu kota) dan menempatkan satu sebelum baris saat ini.
yang tampaknya berfungsi dengan baik. Kebanyakan editor programmer 'sederhana' lainnya (emacs, sublimetext, dll) harus memiliki cara mudah yang serupa untuk melakukan ini.
Sunting: Saya sebenarnya punya:
yang menyalakannya hanya untuk file sumber python. Anda dapat dengan mudah menambahkan baris serupa untuk javascript atau bahasa lain apa pun yang Anda gunakan.
Pembaruan 2019 (Python 3.7+)
Python 3.7+ sekarang memiliki bawaan
breakpoint()
yang dapat menggantikanimport pdb; pdb.set_trace()
vim sebelumnya . Ini masih berfungsi sama.sumber
set autoindent
di file .vimrc Anda .set autoindent
(dan banyak pilihan lain) sebagai standar. Salah satu hal pertama yang saya lakukan dengan sistem baru adalah menarik vimrc yang lebih baik ..."dyy
dan kapan pun Anda membutuhkannya, lakukan"dp
atau"dP
. Pelajari register vim ! Mereka sangat berguna dan selalu didukung!qd
, lalu"dp
tempelkan nanti . Terakhir, tetapkan instruksi Anda ke register sehingga selalu diisi di vim loadup. Contoh:let @d = 'oimport pdb; pdb.set_trace()k0:w'
Sekarang, cukup gunakan@d
kapan pun Anda ingin menempelkan baris ke dalam file. Di atas juga menyimpan file. Tetapi Anda harus merekam milik Anda sendiri (daripada salin / tempel di atas) karena karakter khusus terlibat (untuk melarikan diri, dll).Jika Anda tidak ingin mengatur breakpoint secara manual setiap kali menjalankan program (dengan Python 3.2+), misalnya Anda ingin langsung membuat breakpoint pada baris 3 dan menghentikan eksekusi di sana:
python -m pdb -c "b 3" -c c your_script.py
Informasi berikut dapat membantu:
sumber
Saya belum mencobanya tetapi mereka baru saja menerapkan built-in baru yang disebut breakpoint () dengan Python 3.7 yang berarti Anda dapat memasukkan breakpoint dengan satu pernyataan sekarang:
sumber
Ini adalah bagaimana Anda akan menggunakan pdb di baris perintah tanpa menerapkan apa pun di kode sumber Anda (dokumentasi dan sumber daya online lainnya tidak melakukan pekerjaan yang baik menjelaskan hal ini kepada programmer yang hanya menggunakan debugger visual di masa lalu):
Mulai pdb dengan mengetik berikut ini di prompt shell:
Perintah ini menginisialisasi pdb dan debugger pdb akan berhenti di baris pertama python_script Anda dan menunggu masukan dari Anda:
Ini adalah antarmuka untuk berkomunikasi dengan debugger. Sekarang, Anda dapat menentukan perintah Anda di sini. Menentang penggunaan tombol atau pintasan keyboard di debugger visual, di sini Anda akan menggunakan perintah untuk mendapatkan hasil yang sama.
Anda dapat beralih ke baris berikutnya dalam kode Anda dengan perintah "n" (berikutnya):
Melakukan selanjutnya akan menampilkan nomor baris, dan kode spesifik di sumber:
Anda dapat menyetel breakpoint dengan menentukan nomor baris di kode sumber Anda.
Di sini, debugger disetel ke breakpoint pada baris 50. Jika tidak ada breakpoint lain, breakpoint pada baris 50 akan menjadi yang pertama dan bisa direferensikan oleh id breakpoint yaitu 1 dalam kasus ini. Jika Anda menambahkan lebih banyak break point, mereka akan mendapatkan pengenal secara berurutan (yaitu, 2, 3 dll.)
Setelah breakpoint ditetapkan, Anda akan terus menjalankan program Anda sampai pdb mencapai breakpoint sebagai berikut:
Setelah Anda mencapai breakpoint, Anda bisa pergi ke baris berikutnya, dengan perintah n seperti yang dijelaskan sebelumnya. Jika Anda ingin memeriksa nilai variabel, Anda akan menjalankan perintah parameter sebagai berikut:
Jika Anda tidak lagi membutuhkan breakpoint, Anda dapat menghapusnya dengan meneruskan id dari breakpoint dengan perintah clear:
Terakhir, setelah Anda selesai dengan debugger, Anda dapat keluar dari eksekusi seperti saat Anda keluar dari interpreter baris perintah python.
Saya harap ini akan membantu siapa saja untuk memulai dengan pdb. Berikut adalah daftar perintah yang dapat Anda gunakan dengan debugger: pdb jadi tanya jawab
sumber
Python
3.7
memiliki cara bawaan baru untuk mengatur titik putus. PanggilanSelengkapnya di sini https://stackoverflow.com/a/53263117/6488361
sumber
Anda dapat menggunakan IDE yang mendukung debugging python, atau Anda dapat memeriksa alat Winpdb yang sangat baik. Yang berfungsi pada platform apa pun dan menyediakan fasilitas debugging grafis ke skrip python Anda.
http://winpdb.org/
sumber
Kamu bisa memakai:
Semua dukungan di atas python debugging dari dalam IDE.
sumber
Di Atom jika plugin Python diinstal, Anda cukup mengetik '
pdb
' dan tekan enter dan potongan akan mengetikkan impor dan penelusuran kembali untuk Anda.Saya sudah terbiasa dengan ini sekarang karena terkadang saya hanya mengetiknya bahkan jika saya mengeditnya di vim dan menunggu dropdown muncul.
sumber
Metode yang diremehkan adalah menyetel breakpoint di pdb secara langsung:
akan mengatur breakpoint
site-packages\torch\__init__.py:10
Kemudian
pdb> c
akan berhenti di breakpoint ini.Berikut ini juga valid:
Lihat dokumen untuk detailnya.
sumber
Anda dapat menggunakan Vim dengan plugin Python-Mode atau Emacs dengan Elpy plugin .
Plugin ini memberi Anda breakpoint dengan penekanan tombol yang mudah (
\ b
di Vim danC-c C-u b
Emacs) ditambah banyak fitur lain dari IDE kelas berat (pelipatan kode, pemfaktoran ulang, linting, dll.) - semua dalam editor teks berbasis terminal yang ringan.sumber
Cara termudah untuk menjalankan debugger pada skrip Anda adalah
Menjalankan pdb pada baris perintah Linux memberikan
sumber
pdb
? Atau dari mana?