2009-10-21 4 views
5

में setTrace() एक स्क्रिप्ट में setTrace() फ़ंक्शन का उपयोग करने का कोई तरीका है जिसमें कोई विधि परिभाषा नहीं है? यानीपायथन

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) 

तो आदर्श रूप से मैं लूप में निष्पादित कोड के प्रत्येक पुनरावृत्ति/रेखा पर ट्रेस फ़ंक्शन को कॉल करना चाहता हूं। मैंने इसे स्क्रिप्ट के साथ किया है जिसमें पहले से परिभाषा परिभाषाएं थीं, लेकिन मुझे यकीन नहीं है कि इस उदाहरण में इसे कैसे कामया जाए।

उत्तर

2

settrace() वास्तव में केवल डीबगर्स को लागू करने के लिए है। यदि आप इस प्रोग्राम को डीबग करने के लिए इसका उपयोग कर रहे हैं, तो आप पीडीबी

प्रलेखन के अनुसार बेहतर हो सकते हैं, settrace() जो भी आप चाहते हैं वह नहीं करेगा।

यदि आप वास्तव में लाइन ट्रेसिंग द्वारा यह लाइन करना चाहते हैं, तो संकलक पैकेज पर एक नज़र डालें जो आपको पायथन कंपाइलर द्वारा उत्पादित एएसटी सार सिंटेक्स ट्री को एक्सेस और संशोधित करने की अनुमति देता है। निष्पादन को ट्रैक करने वाले फ़ंक्शन में कॉल डालने के लिए आप इसका उपयोग करने में सक्षम होना चाहिए।

2

मैं केवल उन सब को शासन करने के लिए एक सरल वाक्य रचना लाइन का उपयोग करें:

import pdb; pdb.set_trace() 

यह रखो भी आप निष्पादन तोड़ने के लिए और डिबगिंग शुरू करना चाहते हैं। पीडीबी कमांड का उपयोग करें (अगली के लिए एन, सूची के लिए एल, आदि)।

चीयर्स,

एच