एक जमे हुए Emacs डिबगिंग


48

मैं अपने ई-मेल के लिए mew का उपयोग कर रहा हूं। मुझे एसएमटीपी के लिए अपने ईमेल प्रदाता के साथ टीएलएस का उपयोग करने की आवश्यकता है। हालाँकि, जब मैं इसे लागू करने की कोशिश करता हूं, तो Emacs जमा देता है।

मैं इस अवसर को Emacs के पैकेज के बारे में अधिक जानने के लिए लेना चाहूंगा। मैं इस मुद्दे को डीबग करने के बारे में कैसे जाऊंगा? क्या कुछ प्रकार के अंतर्निहित डिबगर हैं, जैसे कि कॉमन लिस्प में? क्या मैं लॉगिंग का उपयोग कर सकता हूं?


3
आप "कैसे आह्वान करते हैं"? यदि यह एक Emacs कमांड का उपयोग करके है जिसे लिस्प में परिभाषित किया गया है, तो आप (1) स्रोत कोड को लोड कर सकते हैं जो कमांड को परिभाषित करता है, (2) का उपयोग करें M-x debug-on-entry THE-COMMAND, फिर डिबगर का उपयोग करके कदम उठाएं d(या कभी-कभी cकुछ चरणों के माध्यम से छोड़ने के लिए)। स्रोत कोड को किसी अन्य फ़्रेम में खुला रखें, ताकि आप यह अनुसरण कर सकें कि डिबगर क्या कर रहा है। रिपोर्ट करें कि आप यहां क्या देख रहे हैं या, यदि आपको लगता है कि यह एक एमएसीएस बग का सुझाव देता है, तो उपयोग करना M-x report-emacs-bug
ड्रू

जवाबों:


44

का उपयोग करने से पहले gdb, यदि आप यूनिक्स-वाई ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं, तो आप SIGUSR2Emacs प्रक्रिया को भेजने की कोशिश कर सकते हैं , जैसे DEBUGकि अन्य उत्तर में उल्लिखित फ़ाइल में प्रलेखित है ।

$ kill -SIGUSR2 <emacs_pid_goes_here>

यह Emacs को लिस्प डिबगर में अपने वर्तमान लूप से बाहर निकलने का प्रयास करेगा।

या मैन्युअल रूप से emacs pid टाइप किए बिना इस एक लाइनर का उपयोग करें:

$ ps aux | grep -ie emacs | grep -v grep | awk '{print $2}' | xargs kill -SIGUSR2

वैकल्पिक रूप से, यदि killallउपलब्ध हो:

$ killall -USR2 emacs

1
इसे दो बार करना था (ठीक है, मैं :-) से पहले 1 सेकंड से अधिक इंतजार कर सकता था :-)। वैसे भी, यह समस्या को इंगित करता है (एक लंबी पंक्ति के लिए एक फ़ॉन्ट-लॉक प्रसंस्करण भी धीमा)।
स्टीफन गौरिचोन

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

वाह, यह अद्भुत था। अभी भी निश्चित नहीं है कि मेरे मुद्दे का क्या कारण है, लेकिन यह चाल एक जीवनरक्षक है, धन्यवाद!
मैट

3
मेरे सिस्टम पर ऑनलाइनर को 'किल -USR2 एमएसीएस' के लिए सरलीकृत किया जा सकता है (यदि आपके पास पाठ्यक्रम के कई एमएसीएस प्रक्रियाएं हैं तो बचें)।
यंगफ्रॉग

1
इसके लिए htop ( en.wikipedia.org/wiki/Htop ) की सलाह दें । संकेत /खोजने emacsऔर kभेजने के लिए। एक मैक पर गतिविधि मॉनिटर भी कर सकता है (मेनू से: देखें | प्रक्रिया को सिग्नल भेजें)।
लस्सी

36

यदि आप हिट करते समय फ्रीज चले जाते हैं C-g, तो आप अंतर्निहित डीबगर का उपयोग कर सकते हैं। M-x toggle-debug-on-quitसंदेश भेजने से पहले टाइप करें , C-gजब यह जमा हो जाता है, तो हिट करें और *Backtrace*ऊपर आने वाले बफर का निरीक्षण करें ।

यदि C-gमदद नहीं करता है, तो फ्रीज शायद सी कोड में होता है, और आपको बाहरी डीबगर जैसे उपयोग करने की आवश्यकता होगी gdbC-h C-dउस DEBUGफ़ाइल को देखने के लिए हिट करें जो कुछ संकेत देती है कि उसे कैसे करना है। (आप Emacs रिपॉजिटरी वेब इंटरफ़ेस में DEBUG फ़ाइल भी पढ़ सकते हैं ।) यह उत्तरgdb Emacs के साथ उपयोग करने के तरीके के बारे में अधिक विवरण में जाता है।


आपको C-gकई बार हिट करना पड़ सकता है C-g C-g C-g:।
ड्रू

@ ड्रू मैंने यह भी देखा है कि इसे कई बार मारना आवश्यक है। तुम जानते हो क्यों?
विल्फ्रेड ह्यूजेस

2
हाँ। Emacs मैन्युअलQuitting देखें , नोड । मुझे वह कैसे मिला? C-h r i, फिर "Cg" टाइप करें और हिट करें RET
ड्रू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.