2016-10-23 9 views
1

私はJupiterを使用しており、デバッグの方法を習得しようとしています。ただし、デバッグモードを終了することはできません。Jupiterでのipdbデバッグの停止

for i in np.arange(1,10, 0.01): 
    a = someFunc(i) 
    # I want to check the value of "a" in each iteration 
    # here! 
    from IPython.core.debugger import Tracer; Tracer()() #this one triggers the debugger 

私はこのコードを実行すると、「Q」またはプロンプトipdbデバッグで「exit」と入力すると、それだけで次のブレークポイントまでコードを実行し続け、私はデバッグを停止することはできません。デバッグを停止するにはどうすればいいですか?私はドキュメントを調べましたが、 "q"以外のコマンドは見つかりませんでした。

答えて

3

ループを開始する前にトレースを開始する必要があります。現時点では、すべてのループステップで新しいデバッガインスタンスを作成します。

あなたのコードは次のようになります。

from IPython.core.debugger import Tracer 

for i in np.arange(1,10, 0.01): 
    a = someFunc(i) 
    Tracer()() 

あなたはすべての標準ipdbの機能を使用できるコマンドラインプロンプトを取得します。 someFunc(i)を実行した直後にTracerを呼び出すと、繰り返しごとに新しいプロンプトが表示されます。次の反復まで実行を続行するには、cコマンドを使用します。ブレークポイントを設定するには、b <line number>を使用します。 qは、すべての実行を停止します。

+0

ありがとうmiktik。次に、上記のようにループ内の 'a'の値をチェックしたい場合は、どのようにしてforループの中にブレークポイントを設定できますか? – noclew

+0

'Tracer()()'はブレークポイントとして機能します。チェックしたい行の前後に置くことができます。私は私の答えを更新しました、それが助けてくれることを願っています。 – mikitk

+0

更新いただきありがとうございます。しかし、上記のコードを実行すると、 "q"と入力してループを終了することはできません。たとえば、1回の繰り返しで「q」と入力すると、ループを終了するために「q」を1000回押す必要があることを意味する次の繰り返しになります。ブレークポイントがループに挿入されると、ループから抜け出すことはありますか? – noclew

関連する問題