2010-11-14 8 views
7

मुझे सी # फ्लाईमेक मॉड्यूल के भीतर, emacs elisp में एक CPU स्पिन मिल रहा है। (फ्लाईमेक एमएक्स में मॉड्यूल है जो समय-समय पर एक बिल्ड चलाता है, फिर वर्तमान बफर में किसी वाक्यविन्यास त्रुटियों या चेतावनियों को हाइलाइट करता है।)क्या फ्लाईमेक मॉड्यूल में emacs elisp में एक स्पिन डीबग करने की कोई चाल है?

मैं कोड में घुसने वाला हूं, संभावित स्पॉट देखने के लिए जहां स्पिन हो सकती है ।

जबकि मैं इसमें हूं, क्या किसी के पास स्पिन लगाने के लिए सुझाव हैं? क्या इमाक्स में कुछ ऐसा है जो मुझे निष्पादन को रोकने की अनुमति देता है और देखता है कि यह कहां रुक गया?

उत्तर

9

उपयोग M-x set-variablet को debug-on-quit स्थापित करने के लिए मदद कर सकता है। फिर जब समस्या होती है, सी-जी दबाएं और डीबगर आपको इसे रोकते समय क्या चल रहा था इसका बैकट्रैक देगा।

+0

एम-एक्स टॉगल-डीबग-ऑन-छोड़ भी है। –

5

फ्लाईमेक प्रत्येक बफर के लिए 1-सेकंड टाइमर सेट करता है जिसमें फ्लाईमेक-मोड सक्षम है, यह देखने के लिए कि बफर flymake-no-changes-timeout सेकंड पहले से अधिक संशोधित किया गया है या नहीं।

यदि आपके पास फ्लाईमेक-मोड में बहुत से बफर खुले हैं (कई सौ) तो यह एक आश्चर्यजनक रूप से बड़ी मात्रा में सीपीयू खा सकता है, मेरे पास फ्लाईमेक का एक पैच संस्करण है जिसमें एक वैश्विक टाइमर है जो इसे ठीक करता है, और कुछ अन्य मुद्दे: https://github.com/illusori/emacs-flymake

यह आपके लिए एक ही समस्या नहीं हो सकता है, लेकिन मेरे लिए यह 600 फाइलों के साथ डेस्कटॉप मोड में खोलते समय Emacs को लॉक कर देगा, मैं भाग्यशाली होगा कि प्रत्येक कुंजीपेशियों को संसाधित किया जाए 15 मिनट।

+0

धन्यवाद, सैम, यह बहुत उपयोगी लगता है, मैं इसे आज़माउंगा। – Cheeso

2

ओएस एक्स पर मुझे एक समान ध्वनि समस्या थी जहां एक नई फ़ाइल खोलने पर फ्लाईमेक emacs लटकाएगा (यहां तक ​​कि केवल कुछ बफर खुले हैं)। debug-on-quit को सक्षम करने में मदद नहीं मिली, क्योंकि संपूर्ण जीयूआई लॉक हो गया।

$ gdb -p `psgrep emacs` 
(gdb) bt 
#0 0x00007fff98954e42 in __semwait_signal() 
#1 0x00007fff8e5d1dea in nanosleep() 
#2 0x00007fff99e3af05 in +[NSThread sleepUntilDate:]() 
#3 0x000000010015d917 in -[EmacsDialogPanel runDialogAt:]() 
#4 0x000000010015fa1f in ns_popup_dialog() 
[...] 

तो लॉकअप एक संवाद संदेश कह रही की वजह से किया गया था "जबकि चल रहा है विन्यास त्रुटि हो गई है ..." या इसी तरह

this post describing the problem से, आप:

Emacs को gdb अटैच किया जा रहा निम्नलिखित लौटे इन पॉपअप संदेशों को निम्न के साथ अक्षम कर सकते हैं:

कभी-कभी, Emacs बस लटकता है। ओएस एक्स लाल/पीला/नीला बंद/छोटा/ज़ूम बटन ग्रे बदल जाता है जैसे कि Emacs फोकस खो गया है, लेकिन वास्तव में यह सक्रिय अनुप्रयोग है। Emacs के आसपास और पीछे स्विचिंग कार्य इसे पुनर्प्राप्त नहीं करता है। आप कमांड-क्यू इसे छोड़ नहीं सकते हैं।

जब आप आखिरकार हार मानते हैं और इसे फिर से शुरू करते हैं और फिर से शुरू करते हैं, तो आपने अपना काम खो दिया है, अपने गोले, और यह हालिया फाइलों की सूची को सहेजता नहीं है।

(setq flymake-gui-warnings-enabled nil) 

यह आपको बताता है कि यह अपने आप में स्विच करने से बंद है से flymake से बचाता है, लेकिन यह विकल्प की तुलना में बेहतर है।

फ्लाईमेक-डिस्प्ले-चेतावनी एमाक के 'संदेश-बॉक्स' फ़ंक्शन को कॉल करती है, इसलिए अन्य टूल्स भी हो सकते हैं जो एक ही समस्या का कारण बनते हैं।

एक सामान्य चर उपयोग-संवाद-बॉक्स भी है लेकिन इसे डिफ़ॉल्ट टी से शून्य तक सेट करने से फ्लाईमेक में मदद नहीं मिली है।Y-or-no-p और हाँ-या-no-p सेट करने के लिए defadvice का उपयोग करने के लिए interwebs पर एक सुझाव भी है, और फिर से, यह फ्लाईमेक की मदद नहीं करेगा क्योंकि यह नहीं करता है क्योंकि यह नहीं करता है उन कार्यों का प्रयोग करें।

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