Bagaimana cara keluar dari pdb dan mengizinkan program untuk melanjutkan?

111

Saya menggunakan modul pdb untuk men-debug program. Saya ingin memahami bagaimana saya dapat keluar dari pdb dan membiarkan program terus berjalan hingga selesai. Program ini mahal secara komputasi untuk dijalankan, jadi saya tidak ingin keluar tanpa skrip mencoba menyelesaikannya. continuesepertinya tidak berhasil. Bagaimana cara keluar dari pdb dan melanjutkan program saya?

penyu
sumber
2
continuekeluar dari loop, returnkeluar metode / fungsi
Stephan
7
@ Stephan: Dia berbicara tentang continue, perintah pdb. Bukan pernyataan Python.
voithos
1
@turtle: continueharus "Lanjutkan eksekusi, hanya berhenti ketika breakpoint ditemukan", menurut dokumen. Apakah Anda memiliki set breakpoint yang mulai terpukul?
voithos
1
ah. Ok aku paham. ya, saya memiliki set break point di dalam loop. untuk menyiasati ini? loop dipanggil ribuan kali, jadi saya tidak bisa terus menekan terus secara manual.
kura
1
@turtle: Apakah Anda memiliki set breakpoint dari dalam Pdb, atau apakah Anda memiliki pdb.set_trace()dalam kode sumber?
voithos

Jawaban:

190

continueharus "Lanjutkan eksekusi, hanya berhenti ketika breakpoint ditemukan", jadi Anda telah menetapkan breakpoint di suatu tempat. Untuk menghapus breakpoint (jika Anda memasukkannya secara manual):

(Pdb) break
Num Type         Disp Enb   Where
1   breakpoint   keep yes   at /path/to/test.py:5
(Pdb) clear 1
Deleted breakpoint 1
(Pdb) continue

Atau, jika Anda menggunakan pdb.set_trace(), Anda dapat mencoba ini (meskipun jika Anda menggunakan pdb dengan cara yang lebih mewah, ini dapat merusak ...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!
voithos
sumber
10
Di atas tidak keluar dari pdb.
Steve Barnes
7
Tentang kata ke-15 dari pertanyaan itu!
Steve Barnes
13
@SteveBarnes: Saya pikir Anda menganggapnya terlalu harfiah. OP hanya mencapai breakpoint berulang kali. Yang mereka butuhkan hanyalah melanjutkan proses yang berjalan lama tanpa mencapai breakpoint. Apakah Pdb benar-benar berjalan atau tidak adalah tidak penting.
voithos
35
Tip bagus tentang pengaturan set_trace = lambda: None:)
randlet
2
Untuk kasus ekstrim, tidak ada yang bisa mengalahkan set_trace = lambda: None. Python org harus menambahkan perintah yang memungkinkan Anda keluar dari pdb.
ErezO
26

Sederhana Ctrl - Dakan keluar dari pdb. Jika Anda ingin melanjutkan daripada melanggar, cukup tekan calih- continuealih seluruh perintah

Minh Triet
sumber
6
Bagaimana jika Anda berada di dalam suatu fungsi, di dalam loop? Sepertinya hanya pergi ke loop berikutnya untuk saya, dan saya tidak dapat benar-benar menutup pdb, atau bahkan menutup python, tanpa menutup seluruh terminal?
Marses
@LimokPalantaemon Aneh, sudahkah Anda mencoba mengetikexit
Minh Triet
Ini tidak bekerja jika Anda membuat jejak atau jika Anda memiliki break point kecuali Anda terus menekan c.
Alex
memalukan, tapi ini menyelamatkan saya dari terjebak terlalu lama -_-
jmcg
7

The jawaban dari @voithos benar, jadi saya hanya akan menambahkan salah satu alternatif dalam kasus di mana Anda menggunakan set_trace. Ya, pdb.set_trace = lambda: Noneperetasan berfungsi dengan baik, tetapi tidak jika Anda memiliki breakpoint lain yang disetel dan ingin mengaktifkannya kembali nanti. Bagi saya ini menunjukkan fakta yang sayangnyapdb kehilangan banyak fungsi (bahkan hal-hal dasar seperti daftar tampilan), dan ini adalah kasus lain.

Kabar baiknya adalah itu pdb++adalah pengganti drop-in yang bagus pdb, dan salah satu hal yang diselesaikannya adalah masalah penonaktifan set_trace. Jadi, Anda cukup melakukan:

pip install pdbpp

dan kemudian saat (Pdb++)diminta, ketik:

pdb.disable()

Jika Anda ingin mengaktifkan kembali nanti, tidak mengherankan ini berfungsi:

pdb.enable()

Mudah! Dan Anda akan mendapatkan banyak barang berguna lainnya selain itu.

Adam Spires
sumber
4

Jika Anda benar-benar ingin keluar dari debugger maka Anda perlu menjalankan sesuatu seperti WinPdb yang memungkinkan Anda melepaskan proses dan kemudian keluar dari debugger, (NB Ini multi-platform).

Jika Anda ingin melanjutkan debugging tetapi tidak lagi berhenti pada breakpoint tertentu, maka Anda perlu:

  1. Catat nomor breakpoint, (atau file dan nomor baris),
  2. Baik cl bp_number atau clear file:line untuk secara permanen menghapus breakpoint atau disable pb_number untuk menonaktifkannya tetapi dapat mengaktifkannya kembali.
  3. Kemudian continuedan program Anda berjalan hingga breakpoint berbeda berikutnya tercapai.

Untuk detail lebih lanjut di atas lihat manual .

Steve Barnes
sumber
0

temukan cara baru untuk keluar dari pdb tanpa menginstal apa pun: - ketika program mulai dijalankan, tekan ctrl + c, lalu alihkan jendela ke jendela lain (sembarang jendela), maka shell asli dengan pdb yang sedang berjalan akan menunjukkan sesuatu seperti: (pdb) ..... - beralih kembali ke pdb, lalu tekan Enter, sekarang Anda sudah siap, shell perintah pdb muncul kembali

BrainAtom
sumber