[英]How to continue to the next loop iteration in Python PDB?
鑒於此示例代碼:
import pdb
for i in range(10):
pdb.set_trace()
print(str(i))
當我從PDB得到提示時,我怎樣才能跳過循環的迭代,使用continue循環控制語句,當它也被PDB使用時,繼續執行代碼?
您不能使用continue
因為調試器中的新語句需要完整且有效而沒有任何其他上下文; 在編譯時,必須在循環結構內給出continue
。 因此使用!continue
(使用!
以防止pdb
解釋命令)即使調試器正在處理循環結構也不能使用。
您可以使用j[ump]
命令, 前提是您有一個以后的語句要跳轉到 。 如果您想要跳過的語句后循環為空,則只能“回放”:
$ bin/python test.py
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) l
1 import pdb
2
3 for i in range(10):
4 pdb.set_trace()
5 -> print(str(i))
6
[EOF]
(Pdb) j 3
> /.../test.py(3)<module>()
-> for i in range(10):
j 3
跳到第3行,沒有跳過任何東西; 第3行將被重新執行,包括設置range()
。 你可以跳到第4行,但是for
循環不會前進。
你需要在循環結束時添加另一個語句來跳轉到Python繼續。 該聲明可以是print()
或pass
或其他任何不必改變您的狀態的聲明。 你甚至可以使用continue
作為最后一個語句。 我用過i
:
for i in range(10):
pdb.set_trace()
print(str(i))
i # only here to jump to.
演示:
$ bin/python test.py
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) l
1 import pdb
2
3 for i in range(10):
4 pdb.set_trace()
5 -> print(str(i))
6 i # only here to jump to.
7
[EOF]
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) c
> /.../test.py(4)<module>()
-> pdb.set_trace()
(Pdb) s
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) i
1
(Pdb) c
> /.../test.py(4)<module>()
-> pdb.set_trace()
(Pdb) s
> /.../test.py(5)<module>()
-> print(str(i))
(Pdb) j 6
> /.../test.py(6)<module>()
-> i # only here to jump to.
(Pdb) i
2
從調試器命令 :
j( ump ) lineno
設置將要執行的下一行。 僅適用於最底部的框架。 這使您可以跳回並再次執行代碼,或者跳轉到跳過您不想運行的代碼。應該注意的是,並非所有跳轉都是允許的 - 例如,不可能跳轉到
for
循環的中間或跳出finally
子句。
聽起來很奇怪。 您應該能夠使用jump命令 。 您可能需要在for循環結束時添加一個pass語句,以便跳轉到循環結束。 如果您不確定代碼的行號,那么您可以使用ll
找出循環的行號。
> c:\run.py(5)<module>()
-> print(i)
(Pdb) ll
1 import pdb
2
3 for i in range(10):
4 pdb.set_trace()
5 -> print(i)
6 pass
(Pdb) j 6
> c:\run.py(6)<module>()
-> pass
(Pdb) c
> c:\python\run.py(4)<module>()
-> pdb.set_trace()
(Pdb) c
1
> c:\python\run.py(5)<module>()
-> print(i)
值得注意的是,跳轉到for
行將重新啟動循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.