एक अनुकूलित पायथन डीबगर करना किसी अन्य सॉफ़्टवेयर के रूप में है: चीजें वास्तव में अलग-अलग प्रदर्शन-वार हो सकती हैं (मैं पाइडेव लेखक हूं और मैंने पीईडीवी डीबगर किया है, इसलिए, मैं इस पर टिप्पणी कर सकता हूं, लेकिन नहीं अन्य, इसलिए, मैं सिर्फ एक पायथन डीबगर को अनुकूलित करने के लिए थोड़ा सा समझाऊंगा - क्योंकि मैंने पीईडीवी डीबगर को अनुकूलित करने में काफी समय बिताया है - मैं वास्तव में अन्य कार्यान्वयन के बारे में बात नहीं करूंगा क्योंकि मुझे नहीं पता कि कैसे वे किया गया था - pdb के अलावा, लेकिन हालांकि यह बातें लापता चल रहे जब तक आप वास्तव में कोड निष्पादित कि शुरू करेंगे द्वारा अच्छी तरह से काम करता है pdb नहीं वास्तव में एक तेजी से डिबगर लागू होने के बाद यह एक ब्रेकपाइंट हिट और आप इसे माध्यम से कदम रख रहे हैं, अपने कोड का पता लगाना)।
विशेष रूप से, कोई भी 'बेवकूफ' डीबगर आपके प्रोग्राम को प्रत्येक फ्रेम में पाइथन ट्रेस को सक्षम करके और धीमा कर सकता है कि प्रत्येक पंक्ति निष्पादित करने के लिए ब्रेकपॉइंट मैच है या नहीं (यह मोटे तौर पर पीडीबी कैसे काम करता है: जब भी आप कोई संदर्भ दर्ज करते हैं यह इसका पता लगाएगा और प्रत्येक पंक्ति के लिए यह जांच करेगा कि ब्रेकपॉइंट इससे मेल खाता है या नहीं, इसलिए, मुझे विश्वास है कि कोई भी कार्यान्वयन जो तेजी से होने की अपेक्षा करता है वास्तव में इस पर भरोसा नहीं कर सकता है)।
मुझे पता है कि पीईडीवी डीबगर में कई अनुकूलन हैं ... प्रमुख एक निम्न है: जब डीबगर एक नया फ्रेम (यानी: फ़ंक्शन) में प्रवेश करता है तो यह जांच करेगा कि क्या कोई 'संभावित' ब्रेकपॉइंट है जो वहां मारा जा सकता है और वहां नहीं है, तो यह भी है कि समारोह (दूसरी ओर, जब एक ब्रेकप्वाइंट पर बाद में के बाद कार्यक्रम को क्रियान्वित करने है जोड़ा जाता है पर पता लगा नहीं होगा, यह जाने के लिए और सभी पिछले मान्यताओं पुनर्मूल्यांकन के लिए, के रूप में किसी भी वर्तमान फ्रेम हो सकते हैं होगा ब्रेकपॉइंट छोड़ना)। और अगर यह निर्धारित करता है कि कुछ फ्रेम का पता लगाया जाना चाहिए, यह, कि फ्रेम के लिए एक नया उदाहरण है, जिसमें वह सब है कि फ्रेम से संबंधित है कैशिंग के लिए जिम्मेदार (यह केवल अजगर 2.5 से वास्तव में संभव हो गया था हो जाएगा पैदा हो जाएगी, इसलिए जब अजगर 2.4 पर काम कर और इससे पहले, जब तक थ्रेडफ्रेम एक्सटेंशन स्थापित नहीं किया जाता है, तो डीबगर उस अनुकरण का प्रयास करेगा, जो इसे पायथन 2.4 पर काफी धीमा कर देगा)।
इसके अलावा, पीईडीवी डीबगर वर्तमान में साइथन का लाभ उठाता है, भले ही यह केवल सीपीथॉन तक ही सीमित है ... ज्योथन, आयरनपीथन और पीईपी इसका लाभ नहीं लेते हैं), इसलिए शुद्ध पायथन पर विचार करने के लिए कई अनुकूलन अभी भी किए गए हैं मोड (शुक्र है कि साइथन पाइथन के लिए काफी करीब है ताकि साइथन के साथ सीपीथॉन पर इसे तेजी से काम करने के लिए कुछ बदलावों की आवश्यकता हो)।
कुछ संबंधित PyDev डिबगर अनुकूलन विकास के बारे में पोस्ट:
http://pydev.blogspot.co.id/2017/03/pydev-560-released-faster-debugger.html
http://pydev.blogspot.co.id/2016/01/pydev-451-debug-faster.html
http://pydev.blogspot.com/2008/02/pydev-debugger-and-psyco-speedups.html
http://pydev.blogspot.com/2005/10/high-speed-debugger.html
फिर भी, जगह हमेशा कुछ भूमि के ऊपर जोड़ देगा में डिबगर के साथ चल रहा (यहां तक कि डब्ल्यू मुर्गी भारी PyDev डिबगर के रूप में इस तरह के अनुकूलित), इसलिए, PyDev भी एक ही दृष्टिकोण है कि pdb में इस्तेमाल किया जा सकता प्रदान करता है: कोड में एक ब्रेकपाइंट जोड़ सकते हैं और यह केवल उस बिंदु पर पता करना शुरू कर देंगे (जो PyDev के दूरस्थ डीबगर सुविधा है) : http://pydev.org/manual_adv_remote_debugger.html
और तुम डिबगर समर्थन करने के लिए, यह भी धीमी हो सकते हैं सुविधाओं के आधार पर (जैसे: जब आप PyDev में पकड़े गए अपवादों के लिए ब्रेक को सक्षम करते हैं, तो प्रोग्राम धीमा निष्पादित करेगा क्योंकि इसे ठीक से तोड़ने के लिए और अधिक चीजों का पता लगाने की आवश्यकता होगी)।
शायद यह ब्रेकपॉइंट पर इंतजार कर रहा है? – yak
@yak कोई ब्रेकपॉइंट्स नहीं। बस सीधे अंत तक चलाएं। – max
वहां कई सुविधाएं नहीं हो सकती हैं। मुझे लगता है कि एक धीमा के रूप में बस 8 गुना है। लेकिन शायद आपको पता करने के लिए कोड का विश्लेषण और प्रोफाइल करना होगा। –