2010-09-27 9 views
18

मैं सीडीईटी (नवीनतम सीवीएस) का उपयोग कई मामूली बड़ी परियोजनाओं (कुछ सौ केएलओसी प्रत्येक, ज्यादातर सी, लेकिन कुछ सी ++) के साथ करता हूं और कभी-कभी लंबे विराम का अनुभव करता है जिसमें सिस्टम सेकंड के लिए पूरी तरह उत्तरदायी नहीं होता है। शायद ही कभी, यह पूरी तरह से नियंत्रण से बाहर हो जाता है और मुझे C-g पर मैश करना होगा और कर्सर को स्थानांतरित करने या नियंत्रण को वापस पाने के लिए एक अलग बफर पर स्विच करने का प्रयास करना होगा।सीईडीईटी स्केलेबिलिटी टिप्स

मैं जिन परियोजनाओं के साथ काम करता हूं, उनके लिए टैग बनाने के लिए जीएनयू ग्लोबल का उपयोग करता हूं, लेकिन यह अभी भी कभी-कभी धीमा होता है, खासकर semantic-symref-symbol के लिए, और कुछ कूदता है जो बहुत सारे शीर्षलेखों और स्रोत फ़ाइलों को पार्स करने की आवश्यकता होती है। कुछ मामलों में semantic-ia-fast-jump संदेश semantic-ia--fast-jump-helper: Tag SomeFunction has no buffer information के साथ त्रुटियों के बावजूद gtags-find-tag इसे तुरंत (उसी प्रोजेक्ट में) पाता है, हालांकि शायद पुराने स्थान पर; यह एक अस्थायी बग हो सकता है, आमतौर पर semantic-ia-fast-jump विश्वसनीय है।

मैं सभी अर्थगत विश्लेषण खोने के बिना कैसे

  • थ्रॉटल CEDET पर किसी भी सुझाव की सराहना करेंगे।
  • पता लगाएं कि सीईडीईटी नियंत्रण से बाहर निकलने के कारण क्या हुआ है, इसलिए मैं अपनी परियोजना परिभाषाओं को ठीक कर सकता हूं या एक बग रिपोर्ट दर्ज कर सकता हूं।
  • निर्धारित करें कि कुछ अर्थपूर्ण विश्लेषण क्यों विफल हो रहा है।
  • इसे और अधिक उत्तरदायी बनाने के लिए अधिक जानकारी कैश करने के लिए अर्थपूर्ण प्राप्त करें, मेरे पास बहुत सारी स्मृति है जिसका मैं उपयोग करना चाहता हूं।
  • सिस्टम निर्देशिकाओं सहित विभिन्न स्थानों में कई परियोजनाओं के लिए जीएनयू ग्लोबल (बनाएं और चालू रखें) प्रबंधित करें।
  • ede-cpp-root-project के साथ कॉन्फ़िगर की गई परियोजनाओं के बीच निर्भरता प्रबंधित करें।
  • उन परियोजनाओं को प्रबंधित करें जिनमें एकाधिक बिल्ड कॉन्फ़िगरेशन हैं, प्रत्येक अपनी "config.h" और निर्देशिका बनाएं।

लेख http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html में कुछ युक्तियां हैं, मैं उस लेख से परे कुछ भी ढूंढ रहा हूं।

उत्तर

20

आपके द्वारा उपयोग किए जाने वाले सीईडीईटी उपकरण Emacs की पूरी परियोजना में हर प्रतीक को ट्रैक करने की क्षमता से सीमित हैं। सीडीईटी/सेमेन्टिक करता है जो थ्रॉटलिंग के लिए एक अच्छा प्रारंभिक बिंदु semanticdb-find-default-throttle के माध्यम से होता है। यदि आप जानते हैं कि आपकी परियोजना कैसे व्यवस्थित की जाती है, तो आप चीजों को गति देने के लिए कुछ प्रकार की खोज अक्षम कर सकते हैं।

सीडीईटी कई फाइलों को पार्स करेगा जो आपको लगता है कि आपको आवश्यकता हो सकती है जो स्मृति को भी भर देगा। उस स्थिति में आप semantic-idle-scheduler-max-buffer-size को बड़ी फ़ाइलों को पार्स करने के लिए semantic-idle-work-parse-neighboring-files-flag को पार्सिंग यादृच्छिक सामग्री को पार करने के लिए, और पार्सिंग हेडर को अक्षम करने के लिए 'अर्थपूर्ण-निष्क्रिय-कार्य-अद्यतन-शीर्षलेख-ध्वज' अक्षम करने के लिए अनुकूलित कर सकते हैं। ध्यान दें कि अंतिम 2 डिफ़ॉल्ट शून्य है, लेकिन कुछ ऑटो-सेटअप फ़ंक्शंस द्वारा सक्षम हैं।

सीईडीईटी/सेमेन्टिक मेमोरी में बहुत सारे डेटा को कैश करेगा, और प्रदर्शन को बढ़ावा देने के लिए क्रमबद्ध सर्च टेबल तैयार करेगा। यदि आपको लगता है कि आप हेडर फाइलों को संपादित कर रहे हैं, तो वे संपादन कैश को पुराने होने का कारण बनते हैं और उन्हें पुनर्निर्माण के लिए मजबूर करते हैं। यदि आप Emacs से बाहर निकलें और पुनरारंभ करें, तो वह सेमेन्टिक को बड़े डेटाबेस टेबल को पुनः लोड करने के लिए मजबूर करता है।

एक और संभावना है कि आप केवल 0 निर्देशिकाओं को सूचीबद्ध करने के लिए semanticdb-persistent-path सेट करें। यह सहेजे गए डेटा पर वापस कट जाएगा, जो पुनः लोड नहीं होगा। यदि इसकी आवश्यकता है, तो यह आवश्यकतानुसार पुनर्भुगतान करेगा, लेकिन यह कुल डेटा को नीचे रखने में मदद करेगा।

आप semantic--before-fetch-tags-hook का उपयोग ऐसे फ़ंक्शन में भी कर सकते हैं जो विभिन्न स्थितियों के तहत शून्य प्रदान करता है।आकार, नेटवर्क विलंबता, या जो कुछ भी हो, उन्हें पार्स करने के लिए लंबे समय तक लगने वाली फ़ाइलों को ढूंढें, और उन्हें कभी भी पार्स करने के लिए सेट न करें। वह भी कुछ समय बचाएगा।

जीएनयू ग्लोबल का उपयोग करना चीजों को गति देने का एक अच्छा तरीका है। अर्थात् symref के साथ इसका उपयोग करने से फ़ाइलों को आउटपुट डिस्प्ले के लिए आवश्यक डेटा प्रदान करने के लिए पार्स में हिट मिलती है। इसके बारे में बहुत कुछ नहीं है।

ऊपर मिली त्रुटि के लिए, यदि आप इसे पुन: पेश करने के तरीके की पहचान कर सकते हैं, तो कृपया इसे सीडेट-डेवेल मेलिंग सूची पर साझा करें ताकि यह ठीक हो सके। उस प्रकार की बग पहले दिखाई दे रही है, आमतौर पर जब जीएनयू ग्लोबल टैग बफर टैग में कनवर्ट करने में विफल रहता है।

नियंत्रण से बाहर सीडीईटी कताई डीबग करने के लिए, चीजों को कम करने के लिए semantic-debug-idle-function और semantic-debug-idle-work-function का उपयोग करें। वहां कुछ विन्यास के बारे में ऊपर देखें।

आप डेटाबेस को अद्यतन करने के लिए cedet-gnu-global-create/update-database का उपयोग कर सकते हैं, या इसे एक हुक में जोड़ सकते हैं। मुझे नहीं लगता कि इसे अभी तक डॉक्टर में बनाया गया है।

परियोजना प्रबंधन मुश्किल है। अधिकांश अंतर्निहित परियोजनाएं छोटी चीजों के लिए अच्छी हैं। कस्टम बिल्ड सिस्टम के साथ विशेष रूप से बड़ी परियोजनाएं आमतौर पर एक कस्टम ईडीई परियोजना प्रकार की गारंटी देती हैं। नई परियोजनाएं बनाना बहुत बुरा नहीं है। यदि आप ede-linux या ede-emacs में देखते हैं तो आप मूल बातें पकड़ सकते हैं। अपनी कस्टम प्रोजेक्ट में, आप अपनी सभी संबंधित परियोजनाओं को लपेट सकते हैं, और मैक्रोज़ जैसी सुविधाओं को ओवरराइड कर सकते हैं, निर्देशिकाएं और संकलित कमांड शामिल कर सकते हैं। मुझे अपने काम के लिए एक कस्टम प्रोजेक्ट भी लिखना पड़ा। यह ईडी-लिनक्स के समान ही था जहां मैं काम करता हूं।