2009-08-29 12 views
5

मैं Emacs के लिए एक प्रमुख मोड विकसित कर रहा हूँ। क्या कोई तरीका है कि जब मैं फ़ॉन्टिफिकेशन होता है तो मैं स्रोत कोड में ब्रेक पॉइंट सेट कर सकता हूं, उदाहरण के लिए?डीबग Emacs Lisp प्रमुख मोड

उत्तर

7

उस फ़ंक्शन का लिस्प स्रोत ढूंढें जिसे आप चरणबद्ध करना चाहते हैं, और M-x edebug-defun टाइप करें। फिर, जब भी वह फ़ंक्शन निष्पादित किया जाता है, तो आपको स्वचालित रूप से एडबग में रखा जाएगा, जहां आप चाहें तो इसके माध्यम से कदम उठा सकते हैं।

फ़ोटोग्राफ़िक फ़ंक्शन कुछ मुश्किल हो सकते हैं, क्योंकि उन्हें अजीब समय पर बुलाया जा सकता है। *Messages* बफर में संदेश लिखने के लिए आप message फ़ंक्शन का उपयोग कर सकते हैं। एक और चाल फ़ॉन्ट लॉक को बंद करना है (इसलिए आपका फ़ंक्शन स्वचालित रूप से लागू नहीं होता है), फिर उस फ़ंक्शन को प्रीपेड करें जिसे आप edebug-defun से डिबग कर रहे हैं और उसे मैन्युअल रूप से आमंत्रित करें। (ध्यान दें कि आप एक गैर-इंटरैक्टिव फ़ंक्शन का आह्वान करने के लिए M-: (a.k.a. eval-expression) का उपयोग कर सकते हैं।)

+0

हां, यह मेरे मांगपत्र के लिए काम करता है।। -region फ़ंक्शन, लेकिन, जैसा कि आप चेतावनी देते हैं, फ़ॉन्टिंग फ़ंक्शन के लिए नहीं! धन्यवाद। – Alex

4

डिबगिंग elisp के लिए मैनुअल found here हो सकता है।

आप edebug इस्तेमाल किया जा सकता के रूप में उल्लेख किया है, वहाँ भी है एम एक्स डिबग-ऑन-प्रविष्टि और आप (setq debug-on-quit t) सेट कर सकते हैं। लिंक में सभी विकल्पों को देखें, यह सब इस बात पर निर्भर करता है कि आप बिल्ली को कैसे त्वचा बनाना चाहते हैं।

2

और किसी भी अन्य प्रोग्रामिंग भाषा की तरह, आप प्रिंट स्टेटमेंट के साथ डीबग कर सकते हैं। (message "here, foo=%d" foo) आपका दोस्त है। (आपको शायद पता है कि ये संदेश *Messages* बफर में जमा किए गए हैं, इसलिए यदि वे बहुत जल्दी से जाते हैं, तो यह कोई समस्या नहीं है।) trace-function भी सहायक है।

मैंने बहुत सारे emacs मोड लिखे हैं और केवल डीबगर की शायद ही कभी आवश्यकता है। आम तौर पर समस्या कुछ अच्छी तरह से मुद्रित प्रिंट स्टेटमेंट के साथ खुद को उजागर करती है।

+0

सिद्धांत रूप में, एक डीबगर केवल एक गौरवशाली 'सम्मिलित-प्रिंट-स्टेटमेंट' मशीन है, लेकिन यह आपके लिए कार्य स्वचालित करता है, जबकि कोड को खराब नहीं करता है और मैं उस कार्यक्षमता को डिलीग करने के लिए उपयोगी कार्यक्षमता प्राप्त करूंगा जो मैं लिख रहा हूं, खासकर जब मैं elisp के लिए बिल्कुल नया हूँ – Alex

0

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

1

edebug के बजाय आप debug का उपयोग कर सकते हैं। फ़ंक्शन में प्रविष्टि पर डीबगर खोलने के लिए, M-x debug-on-entry THE-FUNCTION का उपयोग करें। या ब्रेकपॉइंट्स (कोड को फिर से eval) के रूप में सेवा करने के लिए स्रोत कोड में debug फ़ंक्शन करने के लिए कॉल डालें।

हालांकि, वास्तविकता वास्तव में अजीब समय पर होती है, जिसमें रेडिसप्ले इत्यादि शामिल हैं। यदि आपको वास्तव में फ़ॉन्टिफिकेशन प्रक्रिया डीबग करने की आवश्यकता है, तो आप font-lock-keywords में फ़ंक्शन का उपयोग कर सकते हैं, केवल regexps नहीं।

लेकिन वास्तव में आपको अपनी फ़ॉन्ट-लॉक डीबगिंग समस्याओं के बारे में और अधिक विशिष्ट होने की आवश्यकता होगी। आम तौर पर लोगों की समस्याएं हैं (ए) font-lock-keywords (संरचना) और (बी) regexps समझना जो वे चाहते हैं से मेल नहीं खाते हैं।

वैसे भी, * breakpoints के बारे में "अपने सवाल का जवाब देने: हाँ, केवल आपके लिस्प स्रोत कोड में चाहते हैं किसी भी बिंदु पर (debug) सम्मिलित डिबगर उस बिंदु पर दर्ज किया जाएगा