2010-07-15 17 views
45

आम तौर पर डीबग करने का सबसे आसान तरीका printf का उपयोग कर रहा है। Emacs-lisp डीबग करने के लिए मैं क्या कर सकता हूं? मैं एलीक्स संपादक को elisp से कुछ प्रिंट कैसे कर सकता हूं? या क्या एलिसप कोड डीबग करने का कोई तरीका है?elisp डीबग कैसे करें?

उदाहरण के लिए, मैं कैसे जांच सकता हूं कि निम्न कोड .emacs फ़ाइल में चलाया गया है या नहीं?

(load "auctex.el" nil t t) 
+0

यह [मैनुअल] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Debugging.html) आप के लिए मदद कर सकते हैं। –

+2

मुझे सिफारिश करने के लिए (http://endlessparentheses.com/debugging-emacs-lisp-part-1-earn-your-independence.html) [इस ब्लॉग पोस्ट] Edebug पर अनुमति दें। – Malabarba

उत्तर

58

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

6

डीबग करने का सबसे आसान तरीका आपके कोड को अंतःक्रियात्मक रूप से चलाने के लिए हो सकता है। आप अभिव्यक्ति के बाद अपना बिंदु डालकर सी-एक्स सी-ई (eval-last-sexp) चलाकर एक लिस्प बफर में ऐसा कर सकते हैं।

वैकल्पिक रूप से:

(message "hello world") 

सी एच एफ संदेश संदेश समारोह में बनाया के बारे में अधिक जानने के लिए। यदि आप बहुत सारे संदेश जेनरेट करते हैं, तो आप वैरिएबल message-log-max को एक बड़े मान पर कस्टमाइज़ करना चाहेंगे।

+0

यह 'printf' दृष्टिकोण के बराबर है, और यह कभी-कभी बहुत अच्छा होता है। – Drew

3

एक एक करके अपने प्रश्नों का उत्तर देने के एक:

  • प्रिंट कुछ: वहाँ एक लाख तरीके। (संदेश "हैलो") स्ट्रिंग को गूंज क्षेत्र में रखता है; ("हैलो" डालें) स्ट्रिंग को वर्तमान बफर में बिंदु पर रखता है ...
  • मैं कैसे जांच सकता हूं कि निम्न कोड चलाया गया है या नहीं: मैं बस "auctex.el" को "कहना" (frotzumotzulous "(यानी, किसी भी स्ट्रिंग को, जब तक कि यह वास्तविक फ़ाइल का नाम नहीं देता) और फिर देखें कि आपको कोई त्रुटि संदेश मिलता है या नहीं। अगर आपको कोई त्रुटि नहीं मिलती है, तो स्पष्ट रूप से कोड चलाया नहीं जा रहा है। यहाँ
  • डिबग

मैं debug का उपयोग एक और पोस्ट में विस्तार से बताया -

  • edebug:
22

जीएनयू Emacs में दो डिबगर रहे हैं।

  • M-x debug-on-entry एक समारोह के बाद आप डिबगर का उपयोग कर दर्ज करना चाहते हैं: ये आम प्रवेश बिंदुओं (इसका इस्तेमाल करने के तरीके) कर रहे हैं।

  • M-x toggle-debug-on-error - त्रुटि उत्पन्न होने पर डीबगर दर्ज करें।

  • M-x toggle-debug-on-quit - जब प्रयोक्ता सी-जी डिबगर दर्ज करें।
  • प्लेस स्पष्ट अपने कोड में विशेष स्थानों (breakpoints) पर debug, कार्य करने के लिए उन स्थानों पर डिबगर दर्ज करने के लिए कॉल:
 
    (debug) 

आप का उपयोग , या डिबगर के माध्यम से कदम किसी विशेष मूल्यांकन के विवरण को छोड़ने के लिए।

+2

विभिन्न चर के मानों को कैसे जांचें? मैं एक फ़ंक्शन के माध्यम से डीबग करने में सक्षम हूं लेकिन विभिन्न चर के लिए मूल्य की जांच कैसे करें, यह नहीं पता। – Alok

+3

@Alok:। आप एक चर पर कर्सर जगह है और प्रेस 'RET', या प्रेस' e' और चर में आपकी रुचि है मूल्यांकन कर सकते हैं – danlei

+1

आप मूल (बुला) संदर्भ में किसी भी sexp मूल्यांकन कर सकते हैं। आप 'डीबग' फ़ंक्शन का मूल्यांकन करने के लिए एक लिंग प्रदान भी कर सकते हैं, इसलिए यह आपको डीबगर खोले जाने पर मान दिखाता है। उदा।, (डीबग शून्य (वर्तमान-बफर)) '। – Drew

12

यह मुद्रण के लिए उपयोगी है महत्व देता

(message "Hello (%s)" foo) 

लेकिन डेटा संरचनाओं के लिए इतनी अच्छी तरह से काम नहीं करता। इसके लिए,

(prin1 list-foo) 

या (prin1-to-string) को इसे (संदेश) में एम्बेड करने के लिए उपयोग करें।

+2

प्रारूप के साथ डेटा संरचना मुद्रित करने के लिए आप "% S" का उपयोग कर सकते हैं – ocodo

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