2012-12-13 63 views
7

मैं एक दृश्य डीबगर बनाना चाहता हूं, जो प्रोग्रामिंग छात्रों को यह देखने में मदद करता है कि अभिव्यक्ति मूल्यांकन कैसे होता है (कैसे उप-अभिव्यक्तियों का मूल्यांकन किया जाता है और उनके मूल्यों द्वारा "प्रतिस्थापित" किया जाता है, एक्सेल में अभिव्यक्ति मूल्यांकन विज़ुअलाइज़र की तरह कुछ)।पायथन अभिव्यक्ति मूल्यांकन प्रक्रिया के माध्यम से कैसे कदम उठाएं?

ऐसा लगता है कि आप पाइथन के पीडीबी के साथ इस प्रक्रिया के माध्यम से कदम नहीं उठा सकते हैं, क्योंकि इसकी बेहतरीन चरण ग्रैन्युलरिटी कोड की रेखा है। क्या यह किसी भी तरह से पाइथन बाइटकोड के माध्यम से कदम संभव है? कोई अन्य विचार इस लक्ष्य को कैसे प्राप्त करें?

संपादित करें: मुझे हल्के समाधान की आवश्यकता है जिसे सीपीथॉन मानक पुस्तकालय के शीर्ष पर बनाया जा सकता है।

+0

वह पाइथन सी स्तर डीबगर [gdb] (http: //wiki.python) जैसा कुछ नहीं होगा।org/मोइन/DebuggingWithGdb)? –

+0

@ एक्स। जैकब्स - मुझे एक समाधान की आवश्यकता है जिसे सीपीथन डिफ़ॉल्ट वितरण पर बनाया जा सकता है और इसे विंडोज़ के साथ-साथ ओएसएक्स और लिनक्स में भी काम करना चाहिए। – Aivar

+0

[जीडीबी 7 के नए पायथन एक्सटेंशन समर्थन का उपयोग कर सी/सी ++ और सीपीथन डीबगिंग] (http://misspent.wordpress.com/2012/03/24/debugging-cc-and-cpython-using-gdb-7s-new -पिथन-एक्सटेंशन-समर्थन /) –

उत्तर

1

मैं अपने आप को एक समाधान विचार भी है करने के लिए योगदान कर सकता है - मैं साधन सब (उप) लपेटकर द्वारा कोड (या एएसटी) कर सकता है एक में भाव डमी विधि कॉल, जो इसके तर्क को वापस करने से ज्यादा कुछ नहीं करता है। उदाहरण के लिए।

x = f(sin(x + y)) 

x = dummy(f(dummy(sin(dummy(dummy(x) + dummy(y)))))) 

इस तरह से मैं अधिसूचित होने की गारंटी कर रहा हूँ के बाद प्रत्येक उपसूचक का मूल्यांकन किया जाता है और मैं भी मूल्यों को प्राप्त हो जाता है।

... dummy(x, line=23, col=13, length=1) ... 

दुर्भाग्य से इस AST और संकलन के साथ खिलवाड़ की आवश्यकता है ...

+0

हाय! ऐसा लगता है कि मैं आपके जैसा ही समस्या हल कर रहा हूं :) क्या आप कृपया [मेरे प्रश्न] पर एक नज़र डालें (http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by- कदम)। एक बक्षीस खुला है। ऐसा लगता है कि मैं यहां वर्णित कोड का एक हिस्सा ढूंढ रहा हूं। मैं आपके Thonny सॉफ़्टवेयर के कोड में खोदने की कोशिश कर सकता हूं (जैसा कि मैं जुपीटर के साथ कुछ इंटरैपरेट करना चाहता हूं और मैं पूर्ण डीबगर नहीं चाहता हूं, मैं वर्तमान में Thonny का उपयोग नहीं करना चाहता), लेकिन मेरा मानना ​​है कि आप करेंगे इसे बेहतर करें :) –

+0

@ IlyaV.Schurov, प्रासंगिक कोड यहां है https://bitbucket.org/plas/thonny/src/master/thonny/backend.py?at=master&fileviewer=file-view-default, शायद आप वहां से कुछ का पुन: उपयोग कर सकते हैं। आपको शायद https://bitbucket.org/plas/thonny/src/master/thonny/ast_utils.py?at=master&fileviewer=file-view-default की भी आवश्यकता है क्योंकि पाइथन एएसटी में प्रत्येक के बारे में पर्याप्त (सही) जानकारी शामिल नहीं है एएसटी नोड कोड में स्थित है। – Aivar

+0

धन्यवाद! क्या आप कृपया अपने उत्तर को [मेरे प्रश्न] (http://stackoverflow.com/questions/40639652/tracing-python-expression-evaluation-step-by-step) पर प्रतिलिपि बनाने के लिए कृपया मुझे संभावित बाउंटी विजेता के रूप में विचार करने की अनुमति दे सकते हैं? –

1

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

यदि आप सूची समझ जैसी चीज़ों में 'कदम' करने की कोशिश कर रहे हैं, तो यह शुद्ध पायथन परिप्रेक्ष्य से काम नहीं करेगा क्योंकि यह एक एकल ऑपोड है। प्रत्येक अभिव्यक्ति के लिए किसी बिंदु पर आपको अपने छात्रों को बताना होगा और यह वह जगह है जहां पायथन सी कार्यान्वयन में जाता है और इसका मूल्यांकन करता है ... '।

+0

पोस्ट करते समय अधिक स्पष्ट रहें समस्या तब होती है जब लाइन पर कई फ़ंक्शन कॉल होते हैं। अगर मैं इस पंक्ति पर "चरण" कमांड चुनता हूं तो मैं खुद को उन कार्यों में से एक में पाउंगा और यह स्पष्ट नहीं है कि कौन सा है। यदि पाइथन सभी कार्यों में कदम उठाता है तो मैं अभिव्यक्ति को अग्रिम रूप से विश्लेषण कर सकता हूं कि यह पता लगाने के लिए कि फ़ंक्शन कॉल का मूल्यांकन किस प्रकार किया जाता है। इससे मुझे इस बात का ट्रैक रखने में मदद मिलेगी कि इस समय सबएक्सप्रेस का मूल्यांकन किस प्रकार किया जाना चाहिए। लेकिन दुर्भाग्य से पाइथन बिल्टिन/सी कार्यों में कदम नहीं उठाता है और सिंटैक्टिक रूप से उन फ़ंक्शन कॉल कॉल से उपयोगकर्ता परिभाषित कार्यों तक अलग-अलग होते हैं। – Aivar

+0

जब तक आप दबाते रहें तब तक यह सभी कार्यों में कदम उठाता है। और आपकी शिकायत है कि 'पायथन बिल्टिन/सी फ़ंक्शंस में नहीं चलता है' बिल्कुल मेरी बात है: किसी बिंदु पर, आप सी में उतरते हैं और उससे निपटने के लिए एक तरीका चाहिए। यह जीडीबी या पूरी तरह से कुछ और हो सकता है, लेकिन यह _always_ होगा। – jknupp

+0

मैं सी कार्यों में कदम नहीं लेना चाहता हूं, मैं सिर्फ यह जानना चाहता हूं कि मैं मूल अभिव्यक्ति के संदर्भ में कहां हूं, लेकिन पायथन मुझे यह नहीं बताता है (मेरा अन्य प्रश्न देखें: http://stackoverflow.com/questions/ 13952022 /)। मैं फ़ंक्शन प्रविष्टियों की संख्या गिन सकता हूं और खुद को स्थिति का ट्रैक रख सकता हूं, लेकिन तथ्य यह है कि फ़ंक्शन द्वारा कुछ (अज्ञात संख्या) फ़ंक्शन कॉल को अनदेखा कर दिया जाएगा, मेरी गिनती प्रणाली को तोड़ देगा। – Aivar

1

आप reinteract की जांच करनी चाहिए, यह बहुत आसान है और आप उस

2

आप pudb की कोशिश की है: मैं भी अतिरिक्त स्थान/एएसटी जानकारी अभिव्यक्ति का कौन सा हिस्सा के बारे में वर्तमान के साथ पेश किया गया है, जैसे जोड़ सकते हैं? http://pypi.python.org/pypi/pudb एक डेबियन की तरह पर: apt-get अजगर-pudb

यह pdb से जुड़ स्थापित करते हैं, तो मुझे लगता है कि यह नहीं है कि आप क्या देख रहे हैं। कम से कम, जब आप एक समारोह में कदम, यह स्पष्ट रूप से दिखाई देता है, जो एक में लिप्त हों

शिक्षण छात्रों के लिए, कुछ है कि आप हो सकता है हो सकता है:।

  • पहले, वैरिएबल का उपयोग कर प्रोग्राम लिखने, रचना कई चरणों का उपयोग कर,
  • डिबग इस कार्यक्रम का उपयोग कर जो भी सभ्य अजगर डिबगर (pdb, winpdb, pudb ...),
  • तो, एक बार प्रक्रिया अच्छी तरह से समझा जाता है, अस्थायी चर से छुटकारा पाने के, कम में कोड के संयोजन से रेखाएं, धीरे-धीरे, जब तक आप अंतिम कोड पर नहीं आते।

मुझे पता है, यह सही होने के लिए बहुत दूर है, लेकिन इस समय मैं सबसे अच्छा सोच सकता हूं।