In Eclipse (und mehreren anderen IDEs) gibt es eine Option, den Haltepunkt erst nach einer bestimmten Anzahl von Treffern zu aktivieren. In Pythons pdb
gibt es eine Trefferanzahl für Haltepunkte, und es gibt den Befehl condition
. Wie verbinde ich sie?python: in pdb ist es möglich, einen Haltepunkt erst nach n Treffer zu aktivieren?
14
A
Antwort
10
fand ich die Antwort. Es ist ziemlich eigentlich einfach, es gibt einen Befehl namens ignore
sagen wir, Sie in Zeile 9 nach 1000 Treffer auf Breakpoint brechen wollen:
b 9
Ausgang: Breakpoint 2 at ...
ignore 1 1000
Ausgang: Will ignore next 1000 crossings of breakpoint 1.
c
13
Bedingte Haltepunkte können in zwei Arten eingestellt werden -
FIRST: den Zustand angeben, wenn der Haltepunkt 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)
zweiten Satz verwendet: Zustand auch zu einem bestehenden angewandt werden kann, Haltepunkt mit dem Befehl condition
. Die Argumente sind die Haltepunkt-ID und der Ausdruck.
$ 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: Ich schrieb einen einfachen Code
import pdb; pdb.set_trace()
for i in range(100):
print i
Debugging auf 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
gibt es anstelle von 'j' eine Variable, die die Trefferanzahl für diesen Haltepunkt enthält? – zenpoy
'j' ist die aktuelle Schleifeniteration. Was meinst du "Trefferanzahl für diesen Haltepunkt"? –
Danke, ich habe die Antwort gefunden .. – zenpoy