2015-01-03 13 views
5

Tôi đang sử dụng Python 2.6.6 và sử dụng pdb để gỡ lỗi chương trình Python của mình, nhưng tôi không rõ ràng về sự khác biệt giữa "tiếp theo" và " cho đến "trong pdb, có vẻ như cả hai người trong số họ sẽ tiếp tục thực hiện cho đến khi dòng tiếp theo trong hàm hiện tại.sự khác biệt giữa "tiếp theo" và "cho đến" trong pdb

Trả lời

3

Các pdb giúp đỡ doc mô tả nó theo cách này:

(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 

helpfully hơn, Doug Hellman gives an example in his Python Module Tutorial of the Week minh họa sự khác biệt:

Các cho đến khi lệnh là như sau, ngoại trừ nó tiếp tục một cách rõ ràng cho đến khi thực hiện đạt một dòng trong cùng một hàm có số dòng cao hơn giá trị hiện tại. Điều đó có nghĩa, ví dụ, cho đến khi có thể được sử dụng để bước qua cuối một vòng lặp.

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) 

Trước khi đến được chạy, dòng hiện tại là 16, dòng cuối cùng của vòng lặp. Sau khi cho đến khi chạy, thực hiện đã được trên dòng 17, và vòng lặp đã được cạn kiệt.

Mục đích của until được chia sẻ với các eponymous gdb command:

cho đến khi

Tiếp tục chạy cho đến khi một dòng nguồn quá khứ dòng hiện tại, trong stack frame hiện tại, là đạt. Lệnh này được sử dụng để tránh đơn bước qua một vòng lặp nhiều lần. Nó giống như lệnh tiếp theo, ngoại trừ khi cho đến khi gặp một bước nhảy, nó sẽ tự động tiếp tục thực hiện cho đến khi bộ đếm chương trình lớn hơn địa chỉ của bước nhảy . Điều này có nghĩa là khi bạn đến cuối vòng lặp sau khi bước duy nhất, mặc dù nó cho đến khi chương trình của bạn tiếp tục thực hiện cho đến khi nó thoát khỏi vòng lặp. Ngược lại, lệnh tiếp theo ở cuối vòng lặp chỉ cần quay trở lại phần đầu của vòng lặp, buộc bạn phải thực hiện bước qua bước lặp tiếp theo.

Các vấn đề liên quan