2013-01-03 9 views
14

eclipse(および他のいくつかのIDEでも同様です)では、特定のヒット数の後でのみブレークポイントをオンにするオプションがあります。 Pythonのpdbには、ブレークポイントのヒットカウントがあり、conditionコマンドがあります。どのようにそれらを接続するのですか?python:pdbでは、nヒットカウント後にのみブレークポイントを有効にすることは可能ですか?

答えて

10

は、私は答えを見つけました。

b 9 

出力:Breakpoint 2 at ...

ignore 1 1000 

出力:Will ignore next 1000 crossings of breakpoint 1.

c 
それはあなたが1000本のヒットの後に9行目にブレークポイントで中断したいとしましょう ignoreと呼ばれるコマンドがあります、実際にはかなり簡単です
13

条件付きブレークポイントは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) 

SECONDを用いて設定されたときの条件を指定しますブレークポイントは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) 

source

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 
+0

には、このブレークポイントのヒット数を保持する変数、 'j'ではなく、そこにありますか? – zenpoy

+0

'j'は現在のループ反復です。 「このブレークポイントのヒットカウント」はどういう意味ですか? –

+0

ありがとう、私は答えを見つけた.. – zenpoy

関連する問題