В eclipse (и нескольких других IDE) есть возможность включить точку останова только после определенного количества обращений. В Python pdb
для точек останова есть количество попаданий, и есть команда condition
. Как подключить их?
Python: в pdb можно включить точку останова только после n попадания?
Ответ 1
Я нашел ответ. Это довольно легко на самом деле, там команда под названием ignore
скажем, вы хотите сломать точку останова в строке 9 после 1000 просмотров:
b 9
Выход: Breakpoint 2 at ...
ignore 1 1000
Выход: Will ignore next 1000 crossings of breakpoint 1.
c
Ответ 2
Условные точки останова могут быть установлены двумя способами -
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
. Аргументами являются идентификатор точки останова и выражение.
$ 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)
UPDATE: Я написал более простой код
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