debug-on-quit
t
पर सेट करने का सुझाव ताकि आप यह पता लगा सकें कि Emacs क्या अच्छा है। आप इसे एक नमूना के साथ नमूना प्रोफाइलिंग के रूप में सोच सकते हैं: अक्सर एक नमूना आपको चाहिए।
अद्यतन: संस्करण 24.3 के साथ शुरू, Emacs दो प्रोफाइलर शामिल हैं। profiler.el
में एक (नया) नमूना प्रोफाइलर है, और elp.el
में एक (पुराना) उपकरण प्रोफाइलर है।
नमूना प्रोफाइलर documented here है। यह उपयोग करने के लिए बहुत सरल है:
प्रोफाइलिंग शुरू करने के लिए, M-x profiler-start
टाइप करें। आप प्रोसेसर उपयोग, स्मृति उपयोग, या दोनों द्वारा प्रोफ़ाइल का चयन कर सकते हैं। कुछ काम करने के बाद, प्रोफ़ाइल के लिए चुने गए प्रत्येक संसाधन के लिए सारांश बफर प्रदर्शित करने के लिए M-x profiler-report
टाइप करें। जब आप प्रोफाइलिंग समाप्त कर लेंगे, तो M-x profiler-stop
टाइप करें।
यहाँ Perforce/Emacs integration कि मैं बनाए रखने के साथ एक cpu+mem
प्रोफाइलर सत्र से कुछ उदाहरण उत्पादन है। where the CPU time and memory use is coming from पता लगाने के लिए मैंने शीर्षतम फ़ंक्शन (progn
) का विस्तार किया है।
Function Bytes %
- progn 26,715,850 29%
- let 26,715,850 29%
- while 26,715,850 29%
- let 26,715,850 29%
- cond 26,715,850 29%
- insert 26,715,850 29%
+ c-after-change 26,713,770 29%
+ p4-file-revision-annotate-links 2,080 0%
+ let 20,431,797 22%
+ call-interactively 12,767,261 14%
+ save-current-buffer 10,005,836 11%
+ while 8,337,166 9%
+ p4-annotate-internal 5,964,974 6%
+ p4-annotate 2,821,034 3%
+ let* 2,089,810 2%
आप देख सकते हैं कि अपराधी c-after-change
है, इसलिए के रूप में यद्यपि मैं locally binding inhibit-modification-hooks
to t
around this code द्वारा CPU समय और स्मृति का एक बहुत बचत हो सकती है यह लग रहा है।
आप Emacs Lisp प्रोफाइलर का भी उपयोग कर सकते हैं। यह अपेक्षाकृत कम दस्तावेज है: आपको विवरण के लिए elp.el
में टिप्पणियां पढ़नी होंगी, लेकिन मूल रूप से आप elp-instrument-package
चलाते हैं ताकि किसी दिए गए उपसर्ग के साथ सभी कार्यों के लिए प्रोफाइलिंग चालू हो और फिर elp-results
परिणाम देखने के लिए।
यहाँ, M-x elp-instrument-package RET c- RET
लिखने के बाद कुछ विशिष्ट उत्पादन है सी की 4000 लाइनों fontifying, और फिर elp-results
चल रहा है (और कॉल गिनती से सॉर्ट करने के elp-sort-by-function
का उपयोग कर): अपने विशेष मामले में
Function Name Call Count Elapsed Time Average Time
============================= ========== ============ ============
c-skip-comments-and-strings 107 0.0 0.0
c-valid-offset 78 0.0 0.0
c-set-offset 68 0.031 0.0004558823
c-end-of-macro 52 0.0 0.0
c-neutralize-CPP-line 52 0.0 0.0
c-font-lock-invalid-string 20 0.0 0.0
c-set-style-1 19 0.031 0.0016315789
...
प्रोफाइलर मदद नहीं करता है तत्काल, क्योंकि आप नहीं जानते कि कौन सा पैकेज गलती पर है। लेकिन अगर आप अनुमान लगा सकते हैं (या इसे सुनिश्चित करने के लिए debug-on-quit
का उपयोग करें) तो प्रोफाइलर समस्या का निदान करने में आपकी सहायता कर सकता है।
अच्छा बिंदु, मैं eval अभिव्यक्ति हर समय करते हैं, लेकिन डिबगिंग के इस मोड hadn ' शुरू में मेरे लिए नहीं हुआ। – EnigmaCurry
आप प्रत्येक लिंग को बदले में मूल्यांकन नहीं करना चाहते हैं (जब तक कि आपके पास बहुत कम न हो)। 'Eval-region' के साथ, एक बाइनरी खोज का प्रयोग करें। – Drew