2015-01-03 8 views
5

私はPython 2.6.6を使用していて、pdbを使ってPythonプログラムをデバッグしていますが、 "next"と " 〜までpdb、それは両方の現在の関数の次の行まで実行を続けると思われる。pdbの "next"と "until"の違いは何ですか

答えて

3

PDBヘルプドキュメントは、それをこのように説明します

違いを示し
(Pdb) help next 
n(ext) 
Continue execution until the next line in the current function 
is reached or it returns. 

(Pdb) help until 
unt(il) 
Continue execution until the line with a number greater than the current 
one is reached or until the current frame returns 
より親切

Doug Hellman gives an example in his Python Module Tutorial of the Week

ザ・それが明示的に実行されるまで リーチを続け以外のコマンドは、次のようになるまで現在の 値よりも高い行番号を持つ同じ関数内の行。つまり、untilはuntilを使用してループの末尾にある を終了することができます。

pdb_next.py

import pdb 

def calc(i, n): 
    j = i * n 
    return j 

def f(n): 
    for i in range(n): 
     j = calc(i, n) 
     print i, j 
    return 

if __name__ == '__main__': 
    pdb.set_trace() 
    f(5) 

$ python pdb_next.py 
> .../pdb_next.py(21)<module>() 
-> f(5) 
(Pdb) step 
--Call-- 
> .../pdb_next.py(13)f() 
-> def f(n): 

(Pdb) step 
> .../pdb_next.py(14)f() 
-> for i in range(n): 

(Pdb) step 
> .../pdb_next.py(15)f() 
-> j = calc(i, n) 

(Pdb) next 
> .../pdb_next.py(16)f() 
-> print i, j 

(Pdb) until 
0 0 
1 5 
2 10 
3 15 
4 20 
> .../pdb_next.py(17)f() 
-> return 

(Pdb) 

実行されるまで前に、現在の行は16、 ループの最後の行でした。実行された後、実行は17行目にあり、ループは になっていました。

untilの目的はeponymous gdb commandと共有されている:

現在のスタックフレームで、現在の行過去ソース線まで実行を継続し、達して

まで。このコマンドは、単一のループを複数回ステップ実行しないようにするために使用します。これは次のコマンド のようなものですが、untilがジャンプすると、プログラムカウンタが ジャンプのアドレスよりも大きくなるまで、自動的に の実行を継続します。これは、単一の が実行された後にループの最後に到達したときまで、untilはループを終了するまで までプログラムを実行し続けることを意味します。これとは対照的に、ループの最後の次のコマンド は、ループの先頭に戻り、次の繰り返しを実行します。

関連する問題