私はipdbをかなり頻繁に使用して、isolatedであるコードにジャンプします。つまり、それを使用する実際のスクリプトを書くのは困難です。代わりに、モックを使用して最小限のテストケースを作成し、それにジャンプします。
ワークフローの例:
def func():
...
import ipdb
ipdb.set_trace()
...
def test_case():
...
func()
...
次に、呼び出す
py.test test_file.py -s -k test_case
今、私は通常、1つまたは2つの変数をチェックしてから終了したいです。コードを変更して、もう一度やり直してください。
終了するにはどうすればよいですか?マニュアルには、q
がデバッガを終了すると書かれています。そうではありません(本当に)。デバッガーが実際に終了する前に、数回終了する必要があります。 Ctrl-CとCtrl-Dについても同じ動作です(さらに、Ctrl-Dを数回押すと最終的に端末が終了するというフラストレーションもあります)。
強制終了するスマートな方法はありますか?このワークフローは賢明なものですか?それを行う標準的な方法は何ですか?
私は.pdbrc
import os
alias kk os.system('kill -9 %d' % os.getpid())
kk
は、デバッガーと(デバッガーをトリガーするプロセス)を強制終了します。
次は私のために働いた:
import sys
sys.exit()
上記および下記で述べたように、ipythonの新しいバージョンでは、これは機能しません。その場合、
import os
os._exit(0)
それでもトリックを行う必要があります。
別の回答で述べたように、これはIPython 5.1のバグでした。 このプルリクエスト で修正され、IPython 5.2以降の問題ではなくなりました。 q
、quit()
、または Ctrl+d デバッガーを終了します。
これは、IPython 5.1.0の最新バージョンの問題です。次のコードを使用して、環境を確認できます。
pip freeze | egrep -i '^i'
IPython == 5.0.0にダウングレードすることで解決します。
pip install ipython==5.0.0
それは私のために働く。