2009-10-21 21 views
5

Có cách nào để sử dụng hàm setTrace() trong tập lệnh không có định nghĩa phương thức không? tức làsetTrace() trong Python

for i in range(1, 100): 
    print i 

def traceit(frame, event, arg): 
    if event == "line": 
     lineno = frame.f_lineno 
     print "line", lineno 

return traceit 

sys.settrace(traceit) 

vì vậy lý tưởng tôi muốn hàm theo dõi được gọi trên mỗi lần lặp/dòng mã được thực hiện trong vòng lặp. Tôi đã làm điều này với các kịch bản đã có định nghĩa phương thức trước đây, nhưng tôi không chắc chắn làm thế nào để làm cho nó hoạt động trong trường hợp này.

Trả lời

2

settrace() thực sự chỉ dành cho việc triển khai các trình gỡ rối. Nếu bạn đang sử dụng nó để gỡ lỗi chương trình này, bạn có thể nên sử dụng PDB

Theo tài liệu, settrace() sẽ không làm những gì bạn muốn.

Nếu bạn thực sự muốn thực hiện dòng này bằng cách dò vết dòng, hãy xem gói trình biên dịch cho phép bạn truy cập và sửa đổi Cây cú pháp trừu tượng AST được trình biên dịch Python tạo ra. Bạn sẽ có thể sử dụng nó để chèn các cuộc gọi đến một hàm theo dõi việc thực thi.

2

tôi chỉ sử dụng một dòng cú pháp đơn giản để cai trị tất cả:

import pdb; pdb.set_trace() 

Đặt nó bất cứ nơi nào bạn muốn phá vỡ thực hiện và bắt đầu gỡ rối. Sử dụng lệnh pdb (n cho tiếp theo, l cho danh sách, v.v.).

Chúc mừng,

H.