pythonpdb-ループをスキップ


88

を使用してループをスキップするにはどうすればよいpdb.set_trace()ですか?

例えば、

pdb.set_trace()
for i in range(5):
     print(i)

print('Done!')

pdbループの前にプロンプ​​トが表示されます。コマンドを入力します。1〜5の値がすべて返されます。実行するpdb前に、もう一度プロンプトが表示されprint('Done!')ます。

回答:


137

untilステートメントを試してください。

(とループの最後の行に移動しnextたりn)してから使用しますuntilunt。これにより、ループの直後の次の行に移動します。

http://www.doughellmann.com/PyMOTW/pdb/には良い説明があります


記事から:を使用してforループの最後の行に移動し、「。」nと入力しuntilます。これは、少なくともその現在のラインを超えるまで続きます。
sachinruk

リスト内包表記でも機能します。最後の行を気にする必要はありません。
シヴァ

ループの最後の行に行くのが面倒な場合はどうしますか?「現在のループまたは関数の実行を終了する」(adv-r.hadley.nz/debugging.html)Rfdebug関数で使用されるものに相当するものは本当にありませんか?
Qaswed

引数なしでuntil(またはその短縮形unt)を使用すると、(returnステートメントをヒットしない限り)常に1行下がるので、n。の代わりに何度も使用することもできます。
ボリス

breakpoint()のループ内のセットでは機能しませんpython 3VB Editor「その場で」ブレークポイントを受け入れることができますが、これは最も可能性が高い場合ではありませんpdb
ティモ

4

ループの後にブレークポイントを設定し(「breakmain.py:4」は、上記の行がmain.pyというファイルにあると想定)、続行する必要があります(「c」)。


2

受け入れられた回答(https://pymotw.com/3/pdb/)で言及されているリンクでは、このセクションがやや役立つことがわかりました。

特定の行まで実行を実行するには、行番号をuntilコマンドに渡します。

これがどのように機能するかの例を次に示します。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください

これにより、追加のブレークポイントを作成する必要があることと、ループの最後に移動する必要があることの2つから解放されます(特に、デバッガーを再実行しないと実行できないように既に反復している場合)。

これがのPythonドキュメントuntilです。ところで、私はpdb++標準デバッガーのドロップインとして使用しています(したがってフォーマット)がuntil、両方で同じように機能します。


0

ループの後に別のブレークポイントを設定し、(デバッグ時に)c次のコマンドでジャンプできます。

pdb.set_trace()
for i in range(5):
    print(i)

pdb.set_trace()
print('Done!')

-17

私がこれを正しく理解していれば。

これを行う1つの可能な方法は次のとおりです。

pdbプロンプトが表示されたら。ただ、ヒットnループを終了するには(次の)10回。

ただし、のループを終了する方法を認識していませんpdb

rただし、関数を終了するために使用できます。


5
そして、ループが10000000の場合はどうなりますか?あなたの答えは非常に明白です。
hecvd 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.