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.

Rhys
sumber

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

shreddd
sumber
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").

mike
sumber
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.

Zach Valenta
sumber
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!')
Qaswed
sumber
-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.

j_juggernaut
sumber
5
Dan bagaimana jika loopnya 10000000? Jawaban Anda sangat jelas.
hecvd