python pdb - lewati loop


88

Bagaimana saya bisa melewati satu loop menggunakan pdb.set_trace()?

Sebagai contoh,

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbmeminta sebelum loop. Saya memasukkan perintah. Semua 1-5 nilai dikembalikan dan kemudian saya ingin ditanyai pdblagi sebelum print('Done!')eksekusi.

Jawaban:


137

Coba untilpernyataannya.

Pergi ke baris terakhir dari loop (dengan nextatau n) dan kemudian gunakan untilatau unt. Ini akan membawa Anda ke baris berikutnya, tepat setelah pengulangan.

http://www.doughellmann.com/PyMOTW/pdb/ punya penjelasan yang bagus


Dari artikel: pergi ke baris terakhir pengulangan for dengan menggunakan n, lalu ketik until. Ini akan berlangsung sampai setidaknya garis saat ini terlampaui.
sachinruk

Bekerja dengan pemahaman daftar juga. Anda tidak perlu peduli dengan baris terakhir.
Siwa

Apa yang akan Anda lakukan, jika pergi ke baris terakhir dari loop tidak praktis? Apakah benar-benar tidak ada padanan untuk fdigunakan oleh debugfungsi R yang "menyelesaikan eksekusi loop atau fungsi saat ini" ( adv-r.hadley.nz/debugging.html )?
Qaswed

Menggunakan until(atau bentuk singkatnya unt) tanpa argumen akan selalu turun satu baris (kecuali Anda menekan pernyataan return), jadi Anda juga bisa menggunakannya berkali-kali daripada n.
Boris

Ini tidak bekerja dengan breakpoint()set di loop masuk python 3. The VB Editordapat menerima breakpoints 'on the fly', tapi ini kemungkinan besar tidak terjadi dengan pdb.
Timo

4

Anda harus menetapkan breakpoint setelah loop ("break main.py:4" dengan anggapan baris di atas ada dalam file bernama main.py) dan kemudian lanjutkan ("c").


2

Di tautan yang disebutkan oleh jawaban yang diterima ( https://pymotw.com/3/pdb/ ), saya menemukan bagian ini agak lebih membantu:

Untuk membiarkan eksekusi berjalan hingga baris tertentu, teruskan nomor baris tersebut ke hingga perintah.

Berikut adalah contoh cara kerja re: loop:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Ini menghindarkan Anda dari dua hal: harus membuat breakpoint ekstra, dan harus menavigasi ke akhir loop (terutama saat Anda mungkin sudah mengulang sehingga Anda tidak akan dapat melakukannya tanpa menjalankan ulang debugger).

Berikut dokumen Python until. Btw Saya menggunakan pdb++sebagai drop-in untuk debugger standar (karena itu pemformatannya) tetapi untilberfungsi sama di keduanya.


0

Anda dapat mengatur breakpoint lain setelah loop dan melompat ke sana (saat debugging) dengan c:

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

Jika saya mengerti ini dengan benar.

Salah satu cara yang mungkin untuk melakukan ini adalah:

Setelah Anda mendapatkan Anda pdbprompt. Tekan saja n(berikutnya) 10 kali untuk keluar dari loop.

Namun, saya tidak mengetahui cara untuk keluar dari loop masuk pdb.

Anda dapat menggunakan runtuk keluar dari suatu fungsi.


5
Dan bagaimana jika loopnya 10000000? Jawaban Anda sangat jelas.
hecvd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.