28

ipdb.set_trace()Pythonコードのどこかで使用しました。IPDB コマンドを使用してこのブレークポイントを無視することはできますか?

clearは、すべてのブレークポイントをクリアしたことを教えてくれますが、IPDB は の行に出くわすと再び停止しipdb.set_trace()ます。

disable 1私に言う:No breakpoint numbered 1 ignore 1言う:Breakpoint index '1' is not valid

明確にするために: もちろん、ソース コードからブレーク ポイントを削除することもできます。ただし、これにはデバッガーを終了し、再度開始する必要があります。多くの場合、どこかに到達するために多くの作業が必要であり、デバッガーを再起動すると、作業がより困難になります。また、巨大なループがあり、ループ内のオブジェクトを検査したい場合、ループ内のオブジェクトの直後にブレークポイントを配置するのが最も簡単です。set_trace()次に、ループ (および数千回の呼び出しすべて) をスキップして、ループの後に を使用してコードをステップスルーするにはどうすればよいnextでしょうか?

4

4 に答える 4

48

Python では何でもオブジェクトであるという事実を利用できます。デバッガーでは、次のようなことができます。

def f(): pass
ipdb.set_trace = f

set_trace は引き続き呼び出されますが、何もしません。もちろん、それはある程度永続的ですが、あなたはただ行うことができます

reload ipdb

元の動作に戻ります。

(なぜこれを行うのでしょうか? 通常は try/except の下で呼び出される頻繁に呼び出される関数にブレークポイントを誤って配置した場合。この関数で 1000 回停止していることに気付いたら、ctrl-c を試みますが、それは try/except によって捕捉され、再び ipdb に戻ります. したがって、低レベルのコードを使用している場合は、 set_traces に何らかのコンテキストがあることを確認してください:

if myvar in ['some', 'sentinel', 'values']:
    ipdb.set_trace()

于 2013-09-30T18:52:26.307 に答える
-3

idb.set_trace()プログラムを実行すると、ヒットしたときに設定した場所も正確にわかるはずです(そうでない場合は、whereまたはbtコマンドを試してください)。その後、その行をファイルから削除して、プログラムを再起動できます。

それ以外の場合は、より実験的な感じがする場合、これが役立つ場合があります。

于 2013-09-30T18:02:19.533 に答える