2013-01-09 45 views
5

में एक पायथन फ़ंक्शन पर ब्रेकपॉइंट कैसे सेट करें मैं कभी-कभी पाइथन स्क्रिप्ट्स (निश्चित रूप से सीपीथॉन) डीबग करने के लिए जीडीबी का उपयोग करता हूं। यह आम तौर पर कोर डंप डीबग करने के लिए उपयोगी होता है (और जब इसमें सी एक्सटेंशन मॉड्यूल शामिल होते हैं)।जीडीबी

एक मूल प्रश्न यह है कि gdb में एक पायथन फ़ंक्शन पर ब्रेकपॉइंट कैसे सेट करें। मान लें कि मेरे पास फ़ंक्शन फू के साथ एक पायथन स्क्रिप्ट है और मैं foo कहने के बाद सही तोड़ना चाहता हूं। मुझे लगता है कि PyEval_EvalFrameEx पर एक सशर्त ब्रेकपॉइंट सेट करना काम कर सकता है, लेकिन यह सुनिश्चित नहीं है कि इसे कैसे किया जाए।

उत्तर

1

तकनीक आप सुझाव का उपयोग करना, यह काम करता है (हालांकि यह बहुत नहीं है):

break PyEval_EvalFrameEx if (strcmp((((PyStringObject *)(f->f_code->co_name))->ob_sval), "foo") == 0) 

यहाँ, च एक PyFrameObject है। यह सुनिश्चित करने के लिए कि आपको सही फ़ाइल मिल गई है, आप f->f_code->co_filename भी जांचना चाहेंगे। ध्यान दें कि यह प्रोग्राम को धीमा कर देता है, क्योंकि आप तोड़ रहे हैं और बहुत तुलना कर रहे हैं।

जीडीबी 7 में सीपीथॉन से निपटने के लिए कुछ अच्छे सहायक मैक्रोज़ हैं, लेकिन मैं उनसे परिचित नहीं हूं। आप जो कुछ ढूंढ रहे हैं उसे पूरा करने के लिए शायद एक अच्छा तरीका है।

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

  • कोई संबंधित समस्या नहीं^_^