pdbを終了してプログラムを続行させる方法は?


111

プログラムのデバッグにpdbモジュールを使用しています。どのようにしてpdbを終了し、プログラムを完了まで続行できるかを理解したいと思います。プログラムの実行には計算コストがかかるため、スクリプトが完了しない限り終了したくありません。continue動作しないようです。pdbを終了してプログラムを続行するにはどうすればよいですか?


2
continueループをreturn終了し、メソッド/関数を終了します
Stephan

7
@Stephan:彼continueは、pdbコマンドについて話している。Pythonステートメントではありません。
voithos 2013

1
@turtle:continueドキュメントによると、「実行を継続し、ブレークポイントに遭遇したときにのみ停止する」べきです。ヒットしているブレークポイントセットはありますか?
voithos 2013

1
ああ。なるほど、分かりました。うん、私はループ内にブレークポイントを設定しています。とにかくこれを回避するには?ループは何千回も呼び出されるため、手動で続行を続けることはできません。
カメ

1
@タートル:Pdb内からブレークポイントが設定されていますか、それともpdb.set_trace()ソースコードにがありますか?
voithos 2013

回答:


190

continue「実行を継続し、ブレークポイントに遭遇したときにのみ停止する」必要があるため、どこかにブレークポイントが設定されています。ブレークポイントを削除するには(手動で挿入した場合):

(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

または、を使用している場合はpdb.set_trace()、これを試すことができます(より豪華な方法でpdbを使用している場合、これにより問題が発生する可能性があります...)

(Pdb) pdb.set_trace = lambda: None  # This replaces the set_trace() function!
(Pdb) continue
# No more breaks!

10
上記はpdbを終了しません。
スティーブバーンズ

7
質問の15番目の言葉について!
スティーブバーンズ

13
@SteveBarnes:私はあなたが文字通りそれを取りすぎていると思います。OPが何度も何度もブレークポイントに達しています。必要なのは、ブレークポイントにぶつかることなく、長期実行プロセスを継続することです。Pdbが実際に実行されているかどうかは重要ではありません。
voithos 2013

35
設定のヒントset_trace = lambda: None:)
randlet 2015

2
極端な場合、何にも勝るものはありませんset_trace = lambda: None。Python orgは、pdbから抜け出すためのコマンドを追加する必要があります。
ErezO 2016年

26

シンプルはCtrl- DPDBから抜け出すだろう。中断するのではなく続行する場合cは、continueコマンド全体ではなく押すだけです。


6
関数の内部、ループの内部ではどうですか?それは私のために次のループに行くようです、そしてターミナル全体を閉じることなく実際にpdbを閉じることはできません、またはPythonを閉じることさえできませんか?
Marses

@LimokPalantaemon奇妙なは、あなたがタイピングを試してみましたexit
ミンTriet

トレースを設定する場合、またはcを押し続けない限りブレークポイントがある場合、これは機能しません。
Alex


7

@voithosからの答えは正しいので、を使用している場合は、代替案を1つだけ追加しset_traceます。はい、pdb.set_trace = lambda: Noneハックは問題なく機能しますが、他のブレークポイントを設定していて、後で再度有効にする場合はできません。私にとってこれpdbは残念なことに多くの機能(表示リストのような基本的なものでさえ)が欠落しているという事実を指摘しており、これは別のケースです。

良いニュースは、これpdb++はの優れた代替品でありpdb、それが解決することの1つは、無効化の問題ですset_trace。だからあなたは単に行うことができます:

pip install pdbpp

(Pdb++)プロンプトで次のように入力します。

pdb.disable()

後で再度有効にしたい場合、当然のことながらこれは機能します。

pdb.enable()

かんたん!そして、あなたはその上に他のたくさんの便利なグッズを手に入れます。


4

本当にデバッガを終了したい場合は、プロセスから切り離してデバッガを終了できるようにするWinPdbなどを実行する必要があります(NBはマルチプラットフォームです)。

デバッグを続行したいが、特定のブレークポイントで停止しない場合は、次のことを行う必要があります。

  1. ブレークポイント番号(またはファイルと行番号)を書き留めます。
  2. どちらかcl bp_number または clear file:line恒久的にブレークポイントを削除するか、 disable pb_numberそれをオフに切り替えますが、戻ってそれを切り替えることができるように。
  3. その後continue、プログラムはそれまで次の異なるブレークポイントに到達します。

上記の詳細については、マニュアルを参照してください。


0

何もインストールせずにpdbを終了する新しい方法を見つける:-プログラムが実行を開始したら、ctrl + cを押し、ウィンドウを別のウィンドウ(任意のウィンドウ)に切り替えます。次に、pdbが実行されている元のシェルは次のようになります。(pdb) .....-pdbに戻り、Enterキーを押します。これで準備が整い、pdbコマンドシェルが再び表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.