studio - python: en pdb, ¿es posible habilitar un punto de interrupción solo después de que n recuentos de hits?
python debugger online (2)
Encontré la respuesta. En realidad, es bastante fácil, hay un comando llamado ignore
, digamos que quiere interrumpir el punto de interrupción en la línea 9 después de 1000 hits:
b 9
Salida: Breakpoint 2 at ...
ignore 1 1000
Salida: Will ignore next 1000 crossings of breakpoint 1.
c
En eclipse (y también en varios otros IDE) hay una opción para activar el punto de interrupción solo después de un cierto número de aciertos. En el pdb
de Python hay un recuento de hits para los puntos de interrupción y está el comando de condition
. ¿Cómo los conecto?
Los puntos de interrupción condicionales se pueden establecer de 2 maneras:
PRIMERO: especifique la condición cuando el punto de interrupción se establece con la 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)
SEGUNDO: la condición también se puede aplicar a un punto de interrupción existente mediante el comando de condition
. Los argumentos son el ID de punto de interrupción y la expresión.
$ 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)
ACTUALIZACIÓN: escribí un código más sencillo.
import pdb; pdb.set_trace()
for i in range(100):
print i
depuración en la terminal
$ 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