मैं Emacs समस्याओं का निवारण कैसे करूँ?


21

ऐसी स्थिति में जहां एमएसीएस ऐसा व्यवहार नहीं कर रहा है जैसे मैं चाहता हूं, मैं समस्या का निवारण करने के लिए क्या कर सकता हूं? समस्या को खोजने और उसे ठीक करने के लिए मैं क्या कदम उठा सकता हूं?

या, यह विफल होने पर, मैं कैसे उपयोगी जानकारी एकत्र कर सकता हूं ताकि यहां (या मेलिंग सूची या अन्य मंचों पर) लोग मेरी समस्या के साथ मेरी मदद कर सकें?

मेरे Emacs में कई पैकेज शामिल हैं, स्निपेट्स का एक संग्रह कॉपी और पेस्ट (या मारे गए और मारे गए) पूरे इंटरनेट पर है, और मेरे अपने कस्टम एलिसिप हैं, जिनमें से कुछ मुझे लिखना याद नहीं है, या अब समझ में नहीं आता है। क्या इन सभी जटिलताओं को समझने का एक तरीका है?


यकीन नहीं होता कि यह इसके लिए सबसे अच्छी जगह है, लेकिन बहुत सारे सवाल हैं जो emacs -Qपहले चरण के रूप में अनुरोध करने वाले उत्तर / टिप्पणियां प्राप्त करते हैं । मैंने उन सवालों के लिंक को नए उपयोगकर्ताओं के लिए सामान्य मदद के रूप में लिखने के लिए इसे लिखा था।
22

हाँ, यह इसके लिए सबसे अच्छी जगह है। वास्तव में, इस तरह के एक सवाल का सुझाव दिया गया था (लगभग) 2 साल पहले: meta.emacs.stackexchange.com/q/198/184 धन्यवाद!
टी। वेरॉन

जवाबों:


28

चरण 1: चल रहा है emacs -Q

पहली चीज जो आपको करने की ज़रूरत है वह आपके किसी भी अनुकूलन के बिना emacs है। यदि आप वेनिला Emacs में समस्या को पुन: उत्पन्न कर सकते हैं, तो यह वास्तव में Emacs में एक बग हो सकता है। यह दुर्लभ है, लेकिन हम इसे पहले चरण के रूप में बताते हैं।

यदि आप -Qध्वज के साथ कमांड लाइन से Emacs शुरू करते हैं , अर्थात emacs -Q, आपको एक नंगे या 'वेनिला' emacs मिलेंगे, जिसमें आपका कोई भी स्थानीय अनुकूलन लोड नहीं होगा। क्या आपकी समस्या अभी भी होती है? यदि हां, तो "एक बग नुस्खा प्रदान करना" पर जाएं।

चरण 1 बी: क्या होगा अगर समस्या पैकेज के साथ है?

यदि आपकी समस्या किसी विशेष पैकेज के लिए विशिष्ट है, तो जाहिर है कि आप उस पैकेज को लोड किए बिना इसे पुन: पेश नहीं कर सकते। लेकिन आप केवल संबंधित पैकेज को लोड करना चाहते हैं, आपके सभी कॉन्फ़िगरेशन को नहीं। ऐसा करने के लिए, emacs -Qफिर से दौड़ें और एक छोटी स्क्रिप्ट तैयार करें जैसे कि निम्नलिखित:

(require 'package)
(setq package-load-list
      '((package1 t)))
(package-initialize)

package1उस पैकेज के नाम से बदलें जिसे आप लोड करना चाहते हैं। यदि आपको कई पैकेज लोड करने की आवश्यकता है, तो तदनुसार स्क्रिप्ट को संशोधित करें:

(require 'package)
(setq package-load-list
      '((package1 t)
        (package2 t)
        (package3 t)))
(package-initialize)

इस कोड को लोड करने के लिए, आप इसे *scratch*बफर में पेस्ट कर सकते हैं , और कॉल कर सकते हैं M-x eval-buffer। (या कोई भी बफर, जब तक कि उसमें कोई अन्य कोड न हो!)।

इस बिंदु पर, आपने पैकेज (ओं) को लोड किया है, और आपके द्वारा परीक्षण किए जा रहे पैकेज (ओं) को लोड किया जा रहा है। यदि आप अब समस्या को पुन: उत्पन्न कर सकते हैं, तो "बग बग प्रदान करना" पर जाएं।

चरण 2: अपने में एक बग ढूँढना .emacs

अब आपने पुष्टि कर दी है कि आपके कॉन्फ़िगरेशन में कुछ समस्या आ रही है ("कॉल घर के अंदर से आ रही है!")। आपका कॉन्फ़िगरेशन कई हजारों लंबी लाइनें हो सकता है, और कई अलग-अलग फ़ाइलों को लोड कर सकता है। समस्या को खोजने के लिए, आप एक द्विआधारी खोज करेंगे, एक बार में आधे कोड को कम करने के लिए नीचे की चीज़ों पर टिप्पणी करेंगे। 1

  1. विकल्प के emacsबिना , अपने नियमित इमैक खोलें -Q
  2. अपनी कॉन्फ़िग फ़ाइल खोलें (आमतौर पर ~/.emacsया .emacs.d/init.el, यदि आप इसे आज़मा नहीं पाते हैं C-h v user-init-file)
  3. फ़ाइल के पहले आधे का चयन करें: C-spaceनिशान सेट करने के लिए, क्षेत्र का विस्तार करने के लिए आधे रास्ते को नीचे स्क्रॉल करें
  4. चयनित क्षेत्र को टिप्पणी दें: M-;और फ़ाइल को सहेजें
  5. एक नया emacs (आपका परीक्षण emacs ) खोलें , जिससे पहले emacs चल रहे हैं। परीक्षण emacs आपके कॉन्फिगर के कम किए गए संस्करण को पढ़ेगा।
  6. परीक्षण emacs में समस्या को पुन: उत्पन्न करने का प्रयास करें
  7. यदि आप इसे पुन: पेश नहीं कर सकते हैं, तो परीक्षण emacs बंद करें , और आपके मूल emacs undoमें टिप्पणी के साथ C-/, और शेष कोड के आधे पर टिप्पणी करें। एक नया परीक्षण emacs खोलें और फिर से प्रयास करें।
  8. यदि आप समस्या को पुन: उत्पन्न कर सकते हैं, तो शेष कोड के आधे पर टिप्पणी करें और देखें कि क्या समस्या बनी रहती है।
  9. इस प्रक्रिया को तब तक दोहराएं जब तक आपको समस्या को पुन: उत्पन्न करने के लिए आवश्यक अपने विन्यास का सबसे छोटा हिस्सा न मिल जाए।

यदि आपकी समस्या एक विशिष्ट पैकेज के साथ है, तो आपको कोड को छोड़ना होगा जो उस पैकेज को लोड करता है, बेशक।

यदि आपकी कॉन्फ़िगरेशन फ़ाइल अन्य फ़ाइलों को लोड करती है, तो आप अपनी खोज को उन फ़ाइलों में भी विस्तारित कर सकते हैं।

इस बिंदु पर, आपने पाया होगा कि समस्या सिर्फ एक पंक्ति या दो कोड के कारण है। आप इसे स्वयं ठीक करने में भी सक्षम हो सकते हैं। यदि हां, तो बधाई, आपने कुछ सीखा है! अन्यथा, चरण तीन के साथ आगे बढ़ें।

चरण 3: एक बग नुस्खा प्रदान करना

इस बिंदु पर, आपको यहां पोस्ट करने के लिए एक विस्तृत बग नुस्खा प्रदान करने में सक्षम होना चाहिए। इसमें शामिल होना चाहिए:

  • आपका Emacs संस्करण (आप Emacs से इसे प्राप्त कर सकते हैं M-x emacs-version
  • आपका ऑपरेटिंग सिस्टम (विंडोज #, मैक, लिनक्स वितरण)
  • पैकेज का संस्करण आपके संघर्ष के साथ, यदि लागू हो
  • समस्या को प्रदर्शित करने के लिए आवश्यक विशिष्ट कदम, जिसमें आप होने की उम्मीद करते हैं , और वास्तव में क्या होता है

उदाहरण के लिए, मैं इस तरह से एक प्रश्न पोस्ट कर सकता हूं:

मुझे सुपर-मोड की समस्या हो रही है। जब मैं उपयोग M-x sm-compile-codeकरता हूं , तो यह मेरे पेपाल खाते से निकासी करता है।

प्रजनन करने कि प्रक्रिया:

सुपर मोड लोड करें:

(require 'package)
(setq package-load-list
      '((super-mode t)))
(package-initialize)
  • के साथ एक नई फ़ाइल खोलें C-x C-f my-code
  • कोड की एक पंक्ति दर्ज करें:
10 goto 10
  • कॉल M-x sm-compile-code

मैं उम्मीद करता हूं कि यह सुपर-कंपाइलर को आमंत्रित करेगा और मेरे कार्यक्रम को संकलित करेगा। इसके बजाय, मुझे मिनीबफ़र में एक संदेश दिखाई देता है "$ 100 पेपाल से सुपर-मोड लेखक को हस्तांतरित"

GNU Emacs 25.1.50.3
डेबियन लिनक्स
सुपर-मोड संस्करण 3.1415


1 बग हंटर पैकेज, इस के साथ मदद कर सकता है (अर्ध) स्वचालित रूप से आपके init फ़ाइल bisecting।


शायद आप बग हंटर का उल्लेख कर सकते हैं ।
उमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.