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


88

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

ただし、nosetestsは、相対的なインポートに依存するテスト(つまり、パッケージ内のテスト)を許可するため、役立ちます。

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

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

このソリューションは適切ではありません。nosetestがpdb出力を妨害し、キーボードのコントロール(矢印キーなど)が壊れます。

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

回答:


118

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

import pdb; pdb.set_trace() 

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

-sそれがキャプチャされないように、鼻に渡すことを確認してくださいstdout


これを私の質問に追加しようとしていました。これも許容できる解決策ではありません。nosetestsでこれを使用する場合、pdbコンソールへのアクセスがスクリーニングされ、pdbコマンドを実行できないため、これは文字通り使用できないことが明らかです。
Devin

25
nosetestsに-sフラグを追加してstdoutをキャプチャしないようにすると、pdbを問題なく使用できます。
Ned Batchelder、2011

1
動作しません。これを使用してください:from nose.tools import set_trace; set_trace()
anilbey

142

使用することを思い出すよりも、Noseに付属-sするset_traceバリアントを使用する方が良いでしょう。追加

from nose.tools import set_trace; set_trace()

デバッガーに侵入したいところはどこでも。stdin / outリダイレクトが自動的に処理されます。私が遭遇した唯一の奇妙な副作用は、run鼻の実行中にデバッグしているときにpdb内から(を使用して)コードを再起動できないことです。


これに関する文書はありますか?ループから抜け出す方法は?
AJ

あなたはpdb走ったらどうやってナビゲートするのですか?ドキュメントがあると確信していますが、頭から離れてs、関数呼び出しを「ステップイン」nし、「次の」ステートメントに進みu、スタックを「上」にd移動し、「下」に移動します。を使用bして、ブレークポイントを設定しc、ステッピングデバッガを「続行」して終了できます。お役に立てば幸いです。
Matt Luongo、2016年

4
これは受け入れられる答えになるはずです。元のpdb.set_trace()コマンドのすべての通常の機能を提供します。
tbm

これのipython / ipdbバージョンの可能性はありますか?
gerrit

5

あなたがipythonを持っているなら、無制限の素晴らしい使用のために:

import ipdb; ipdb.set_trace() 

*無制限の素晴らしさ:ipythonと同じように-自動補完、色付けなど


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