दुर्घटनाग्रस्त Emacs की बेहतर डिबगिंग?


9

हालांकि Emacs (24.3.93.1) फाइंडर से लॉन्च होने पर ठीक चलता है, अगर टर्मिनल संस्करण लॉन्च किया गया है:

/Applications/Emacs.app/Contents/MacOS/Emacs -nw

Emacs के साथ क्रैश:

Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw

ऐसा लगता है कि यह मुद्दा init.el में एकल पंक्ति के कारण है,

(set-face-attribute 'default nil :font "Menlo-16")

अगर उस लाइन पर टिप्पणी की जाती है, तो Emacs का टर्मिनल संस्करण भी ठीक शुरू हो जाएगा।

दुर्घटना का कारण बताने में मुझे कई घंटे लग गए (मेरा init.el आधा आधा घट गया)।

मुझे पता है कि किसी भी स्थिति में Emacs टर्मिनल ऐप में जो भी फॉन्ट और फॉन्ट साइज़ निर्दिष्ट करेगा, (मूल रूप से, वह लाइन क्ली में सार्थक नहीं है।)

  1. सामान्यतया, क्या दुर्घटनाग्रस्त Emacs को डीबग करने का एक बेहतर तरीका है? शायद किसी प्रकार के क्ली डिबगर का उपयोग करना जो अधिक वर्णनात्मक संदेश प्रिंट करेगा?
  2. क्‍यों क्‍यों क्‍यूं क्‍यूं क्‍योंकि Emacs को cli के माध्‍यम से क्रैश किया जाता है, लेकिन अगर फाइंडर से लॉन्च नहीं किया गया तो?

क्या यह वास्तव में cli से लॉन्च हो रहा है? या टर्मिनल संस्करण को लॉन्च करना जो समस्या पैदा कर रहा है? सेट-फेस-विशेषता के आसपास कुछ त्रुटि पकड़ने की कोशिश करें? (कंडीशन-केस इरिटेट (सेट-फेस-
एटिट्यूशन

3
बग रिपोर्ट दर्ज करें। लिस्प कोड के कारण Emacs को कभी क्रैश नहीं करना चाहिए। लेकिन यह आपके द्वारा उपयोग किए जा रहे विशिष्ट बिल्ड के साथ एक समस्या हो सकती है, क्या यह आधिकारिक रिलीज़ है?
मालाबार

@ nic-ferrier: मेरे पास अब init.el में सिर्फ एक लाइन है, फिर (condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))भी मेरे पास एक ही त्रुटि संदेश के साथ एक ही दुर्घटना है। कोई अतिरिक्त संभावित मूल संदेश नहीं है।
gsl

@ malabarba: मैंने emacsformacosx.comGNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.org से कोशिश की है , और Emacs क्रैश नहीं करता है। तो, बाद के संस्करणों में यह एक बग होना चाहिए। मैं एक बग रिपोर्ट दर्ज करूंगा।
gsl

1
जैसा कि @ मलबारा ने संकेत दिया: एक बग रिपोर्ट (तुरंत) M-x report-emacs-bug:। Emacs Developers तब आपको इस समस्या से छुटकारा दिलाने में मदद करने के लिए क्या कर सकता है।
ड्रयू

जवाबों:


6

अगली बार इसे ट्रैक करने में आपकी मदद करने के लिए

यह मेरे साथ पहले भी हुआ था। एक ऐसी स्थिति थी जहां string-to-intएमाक्स दुर्घटनाग्रस्त हो गया था , और मुझे पिनअप करने में भी घंटों लग गए।
क्षमा करें, मैं एक अच्छा उत्तर नहीं दे सकता, लेकिन Emacs की क्रैश सी कोड में गहराई से होती है, और ऐसी समस्याओं को ट्रैक करने के लिए कोई अंतर्निहित उपकरण उपलब्ध नहीं हैं।

मुझे लगता है कि इसके साथ डिबगिंग gdbसंभव है, लेकिन इसकी प्रभावशीलता आपकी प्रवीणता पर निर्भर करेगी gdb

आपको वास्तव में क्या करने की आवश्यकता है

बग रिपोर्ट दर्ज करें

शुद्ध एलिसिप कोड (गैर-बाइट-संकलित) को कभी भी एमएसीएस को क्रैश नहीं करना चाहिए। यह एक हैंग का कारण बन सकता है (कुछ अनंत लूप के कारण) और यह एमएसीएस को स्मृति से बाहर चलाने का कारण बन सकता है। लेकिन, इससे परे, कोई भी दुर्घटना बग है

M-x report-emacs-bug

अपने निर्माण और सिस्टम के विवरण के साथ, आपके द्वारा दिए गए इस न्यूनतम काम के उदाहरण को प्रदान करने के लिए, समान डेवलपर्स के लिए पर्याप्त मदद होनी चाहिए।


2
Gdb का उपयोग करना एकमात्र तरीका होगा। हम हर सी कॉल को हर चीज में लपेटने के लिए Emacs में सामान जोड़ सकते हैं जो कि खुद को पकड़ लेगा लेकिन हर समय ओवरहेड होगा। Emacs को क्रैश नहीं करना चाहिए, अगर ऐसा होता है तो हमें विशेष रूप से उस बग को संभालना चाहिए ताकि यह अब और न हो। तो हाँ, अगर यह टूट गया है, तो एक बग दर्ज करें। सभी तरह से पता लगाने के लिए gdb का उपयोग करें कि बग कहाँ है।
निक फेरियर

4

जीडीबी के साथ डिबग के संदर्भ के रूप में आप बिल्ड ट्री से src / temacs का उपयोग करना चाहते हैं। यह प्री-डंप किए हुए एलीस के बिना Emacs है जो डिबगर को भ्रमित करता है।

gdb --args src/temacs -nw

1
धन्यवाद, उत्कृष्ट सलाह (और बहुत आसान नहीं है चारों ओर भी मिल जाए)। धन्यवाद।
gsl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.