[英]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.