2010-07-22 5 views
8

मैं डिबगिंग/विकास के लिए पाइथन की आत्मनिरीक्षण क्षमता का उपयोग करना चाहता हूं, लेकिन इसके लिए उचित टूल नहीं मिल रहा है।पायथन में इंटरैक्टिव डीबग के लिए सबसे अच्छा तरीका क्या है?

मुझे विशिष्ट स्थिति या विशिष्ट घटना (जैसे अपवाद) पर शैल (उदाहरण के लिए आईपीथन) में प्रवेश करने की आवश्यकता है, स्थानीय लोगों और शैल के ग्लोबल्स को फ्रेम के सेट पर सेट किया जा रहा है।

मेरा अपना त्वरित हैक यह वर्णन करने के लिए:

import inspect 
from IPython.Shell import IPShellEmbed 
def run_debug(): 
    stack = inspect.stack() 
    frame = stack[1][0] 
    loc = frame.f_locals 
    glob = frame.f_globals 
    shell = IPShellEmbed() 
    shell(local_ns=loc, global_ns=glob) 
run_debug() 'ब्रेकपाइंट' से कॉल अनुसार के साथ

या छोड़कर कोशिश /। लेकिन, जाहिर है, इसे थ्रेड किए गए ऐप्स के साथ काम करने के लिए पॉलिशिंग, एएसपी की बहुत जरूरत है।

winpdb कंसोल के साथ ब्रेकपॉइंट्स है, लेकिन मुझे इससे उचित पायथन शेल चलाने के लिए कोई रास्ता नहीं मिला, और eval()/exec() लंबे डीबग के लिए बहुत आसान नहीं हैं।

उत्तर

2

व्यक्तिगत/शिक्षा उद्देश्यों के लिए आप WingIDE का उपयोग कर सकते हैं - उनके पास कुछ ठोस ठोस डिबगिंग क्षमताएं हैं।

बेशक यदि आप मूल्यों को बदलने के बारे में चिंतित हैं तो आप हमेशा raw_input() का उपयोग कर सकते हैं - लेकिन यह आपकी आवश्यकताओं के लिए पर्याप्त उन्नत नहीं हो सकता है।

+0

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

+0

मुझे लगता है कि चार्ज करने के लाभों में से एक है - वे लोगों को किराए पर ले सकते हैं और * उन्हें * इस तरह की समस्याओं पर काम करने के लिए भुगतान कर सकते हैं;) बेशक यदि यह बहुत महंगा है तो आप हमेशा स्थानीय पायथन सम्मेलन के लिए चारों ओर देख सकते हैं और सुझाव देते हैं कि वे पूछें कुछ देने वाली प्रतियों के लिए विंग। उन्होंने हमें हर साल 3-4 दिया है जिसे हमने पूछा है, और मैंने उनके साथ सुनाई गई हर दूसरे व्यवहार को प्रभावशाली बना दिया है। –

0

PyScripter (FOSS) एक बहुत अच्छी डीबगर में बनाया गया है ले चाहते हैं के समान है।

0

यदि आप अपना कोड ipython से चलाते हैं और अपवाद दबाते हैं, तो आप अपवाद पर पीडीबी में ड्रॉप करने के लिए बाद में% डीबग कॉल कर सकते हैं। यह आपको जो चाहिए वो आपको देना चाहिए। या यदि आप ipython -pdb चलाते हैं, तो एक अनचाहे अपवाद होने पर आपको स्वचालित रूप से पीडीबी में गिरा दिया जाएगा।

3

आप जो भी कर रहे हैं उसके समान, ipdb है। प्रभावी रूप से, यह आईपीथॉन के खोल के साथ पीडीबी है (यानी टैब पूर्णता, सभी विभिन्न जादू कार्य, आदि)।

यह वास्तव में आपके प्रश्न में पोस्ट किए गए छोटे कोड को ठीक से कर रहा है, लेकिन इसे एक सरल "ipdb.set_trace()" कॉल में लपेटता है।

+1

हां, मुझे लगभग जो चाहिए वह है, लेकिन यह धागे के साथ अच्छी तरह से नहीं खेलता है, जैसे कि मेरे अपने उदाहरण। जब मैं इसे किसी बच्चे के थ्रेड से कॉल करता हूं, तो अन्य अभी भी चल रहे हैं, डेटा बदल रहे हैं, रुक गए धागे पर संदेश भेज रहे हैं, और डेटा को कंसोल में आउटपुट रखते हैं। –

संबंधित मुद्दे