在 Eclipse(以及其他几个 IDE)中,有一个选项仅在一定数量的命中后才打开断点。在 Python 的
pdb
中,有断点的命中计数,并且有 condition
命令。我如何连接它们?
我找到了答案。实际上很简单,有一个名为
ignore
的命令,假设您想在第 1000 次命中第 9 行的断点处中断:
b 9
输出:
Breakpoint 1 at ...
ignore 1 999
输出:
Will ignore next 999 crossings of breakpoint 1.
c
条件断点可以通过两种方式设置 -
FIRST:使用
break
指定设置断点时的条件
python -m pdb pdb_break.py
> .../pdb_break.py(7)<module>()
-> def calc(i, n):
(Pdb) break 9, j>0
Breakpoint 1 at .../pdb_break.py:9
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at .../pdb_break.py:9
stop only if j>0
(Pdb) continue
i = 0
j = 0
i = 1
> .../pdb_break.py(9)calc()
-> print 'j =', j
(Pdb)
第二: 条件也可以使用
condition
命令应用于现有断点。参数是断点 ID 和表达式。
$ python -m pdb pdb_break.py
> .../pdb_break.py(7)<module>()
-> def calc(i, n):
(Pdb) break 9
Breakpoint 1 at .../pdb_break.py:9
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at .../pdb_break.py:9
(Pdb) condition 1 j>0
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at .../pdb_break.py:9
stop only if j>0
(Pdb)
更新:我写了一个更简单的代码
import pdb; pdb.set_trace()
for i in range(100):
print i
在终端上调试 -
$ python 1.py
> /code/python/1.py(3)<module>()
-> for i in range(100):
(Pdb) l
1
2 import pdb; pdb.set_trace()
3 -> for i in range(100):
4 print i
[EOF]
(Pdb) break 4, i==3
Breakpoint 1 at /code/python/1.py:4
(Pdb) break
Num Type Disp Enb Where
1 breakpoint keep yes at /code/python/1.py:4
stop only if i==3
(Pdb) c
0
1
2
> /Users/srikar/code/python/1.py(4)<module>()
-> print i
(Pdb) p i
3