2011-05-31 8 views
34

में एक पाइथन एक्सटेंशन को डिबग करना मेरे पास एक पायथन एक्सटेंशन है जिसे मैंने सफलतापूर्वक बनाया है और विंडोज, ओएसएक्स और लिनक्स पर उपयोग किया है। अब मुझे इस पायथन एक्सटेंशन को डीबग करने में सक्षम होना चाहिए। मैं कमांड लाइन पर जीडीबी के उपयोग के विपरीत हूं, इसलिए मैं इसे ग्रहण में काम करने के लिए वास्तव में प्राप्त करना चाहता हूं।ग्रहण

आरंभ करने के लिए, मैंने http://www.heikkitoivonen.net/blog/2008/07/21/debugging-python-extension-written-in-c-with-eclipse/ में निर्देशों का पालन करने के लिए अपना सर्वश्रेष्ठ प्रयास किया, और मैंने पाइथन स्रोत के लिए फ़ोल्डर को जोड़ा और साथ ही साथ पाइथन एक्सटेंशन कोड के फ़ोल्डर को खाली फ़ोल्डर में स्रोत फ़ोल्डर्स के रूप में जोड़ा। चूंकि लिनक्स पर आवश्यक सब कुछ डीबग बनाने के लिए अपेक्षाकृत आसान है, इसलिए मैंने उबंटू में डीबग विकास के साथ शुरुआत की।

एक बार मैं अजगर की एक डीबग बिल्ड मिला है, मैं

python_d setup.py build 

जो भी विस्तार मॉड्यूल की एक डीबग बिल्ड उपज चाहिए के साथ अपने विस्तार के लिए setup.py भाग गया (फोन यह python_d की सुविधा देता है)। मैंने सत्यापित किया है कि एक्लिप्स में एप्लिकेशन के रूप में एक्सटेंशन खोलकर प्रतीकों का निर्यात किया जा रहा है और मैं पाइथन साझा ऑब्जेक्ट से जुड़े स्रोत कोड को देख सकता हूं।

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

पाइथन एक्सटेंशन मॉड्यूल में ब्रेकपॉइंट पर रोकने के लिए ग्रहण कैसे प्राप्त कर सकते हैं?

+1

क्या आप पाइथन कोड सी कोड को कॉल करने से ठीक पहले ब्रेकपॉइंट सेट कर सकते हैं? यदि हां, तो क्या आप सी फ़ंक्शन के अंदर कदम रखने के लिए "चरणबद्ध" का उपयोग कर सकते हैं? –

उत्तर

1

आप कौन सा कंपाइलर उपयोग कर रहे हैं, एमएसवीसी या जीसीसी? एमएसवीसी के लिए, आप पहले पायथन शुरू कर सकते हैं, और python_d.exe (विंडबग या विजुअल स्टूडियो) संलग्न कर सकते हैं, फिर आप अपना मॉड्यूल लोड कर सकते हैं, ब्रेकपॉइंट सेट कर सकते हैं, आप यह सत्यापित कर सकते हैं कि आपके मॉड्यूल का प्रतीक डीबग-> मॉड्यूल विंडोज़ में लोड हो गया है या नहीं (MSVC)।