web-dev-qa-db-ja.com

nosetests --pdbオプションでブレークポイントを設定する

nosetests --pdbエラーや失敗で停止させてくれますが、これは私のニーズには遅すぎます。実行中にコードをステップ実行すると、問題のある場所をデバッグするのに役立ちます。

ただし、nosetestは、相対的なインポートに依存するテスト(パッケージ内のテスト)を許可するので便利です。

テストを実行する前にブレークポイントを設定するにはどうすればよいですか?現在、私は使用しています:

python -m pdb /path/to/my/nosetests testfile.py

この解決策は適切ではありません。 Nosetestsはpdbの出力に干渉し、キーボードコントロール(矢印キーなど)が壊れています。

Import pdbを使用します。 pdb.set_trace()は良い考えのようですが、nosetestsはpdbコンソールへのアクセスをブロックしています。

81
Devin

あなたは付け加えられます

import pdb; pdb.set_trace() 

デバッガで停止するソース内の任意の場所。

-sは、stdoutをキャプチャしないように鼻に付けます。

111
Ned Batchelder

-sを使用することを覚えておくよりも、Noseに付属しているset_traceバリアントを使用することをお勧めします。追加

from nose.tools import set_trace; set_trace()

デバッガに侵入したい場所ならどこでも。 stdin/outリダイレクトはあなたのために世話をされます。私が遭遇した唯一の奇妙な副作用は、ノーズラン中のデバッグ中に(runを使用して)pdb内からコードを再起動できないことです。

132
Matt Luongo

ipythonを使用している場合、無制限の素晴らしい使用方法:

import ipdb; ipdb.set_trace() 

*無制限の素晴らしい:ipythonのように-オートコンプリート、カラーリングなど.

5

pytestを使用している場合は、

import pytest; pytest.set_trace()

ドキュメント を参照してください。

0
gerrit