web-dev-qa-db-ja.com

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

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

81
turtle

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!
_
153
voithos

シンプルな Ctrl-D pdbから抜け出します。中断するのではなく続行したい場合は、単に c continueコマンド全体ではなく

17
Minh Triet

@voithosからの answer は正しいので、set_traceを使用している場合に1つの選択肢を追加します。はい、pdb.set_trace = lambda: Noneハックは正常に動作しますが、他のブレークポイントが設定されていて、後で再度有効にする場合はそうではありません。私にとってこれは、残念ながらpdbが多くの機能(ディスプレイリストのような基本的なものでさえ)を欠いているという事実を指し、これは別のケースです。

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

pip install pdbpp

(Pdb++)プロンプトで、次を入力します。

pdb.disable()

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

pdb.enable()

簡単!そして、あなたはその上に他の多くの便利なグッズを手に入れるでしょう。

4
Adam Spiers

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

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

  1. ブレークポイント番号(またはファイルと行番号)をメモします。
  2. cl bp_numberorclear file:lineブレークポイントを永久に削除するにはまたはdisable pb_numberオフに切り替えますが、元に戻すことができます。
  3. 次に、continueを実行し、次にdifferentブレークポイントに到達するまでプログラムを実行します。

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

4
Steve Barnes