Profil yaramazlık Emacs Lisp için ipuçları?
Ben Özelleştirme Bir sürü Emacs. Son zamanlarda, benim için bir şey ekledim .ara sıra benim CPU mandal o emacs yapılandırma 100%, ama gerçekten ne olduğunu bilmiyorum.
Eğer C-g basarsam defalarca, sonunda bir mesaj yollayacağımaşağıdaeğer emacs tamamen iptal etmek istersem eğer benim dosyaları otomatik kaydetmek istiyorsanız bana soran minibuffer. Eğer hayır demek ve basılması C-g tutmaya devam edersem, sonunda normal olarak emacs çalışan dönebilirim. Bir saat kadar sonra yine olacak.
Benim gibi, son zamanlarda ekledik çeşitli şeyler dışarı yorum, emacs yeniden, suçlu daraltmak için denemeye devam edebilirdim, ama yavaş ilerliyor.
Doğrudan emacs lisp fonksiyonu CPU hogging ne olduğunu anlamaya profil edebilirim bir yolu var mı?
CEVAP
Emacs ne bulabilirsiniz böylece t
debug-on-quit
ayar önerisi iyiydi. Tek bir örnek ile profil örnekleme biçimi olarak düşünebilirsiniz: genellikle tek bir örnek yeterlidir.
Güncelleme:Sürüm 24.3, Emacs ile başlayan içeririkiprofilciler. ** 4 ve elp.el
(eski) açıklamak bir profiler (yeni) örnekleme profiler var.
Örnekleme profiler documented here. Oldukça basit bir kullanımı var:
Profil oluşturma başlamak için, tip 6**. İşlemci kullanımı, bellek kullanımı, ya da her ikisi tarafından profil seçebilirsiniz. Biraz iş yaptıktan sonra, tip 7* *profil için seçtiğiniz her kaynak için özet bir tampon görüntülemek için. Profil oluşturma işlemini bitirdiğinizde, tip 8**.
İşte bir örnek, ben korumak Perforce/Emacs integration cpu mem
profilcisi çıktı. where the CPU time and memory use is coming from öğrenmek için en üstteki fonksiyon (progn
) büyüttüm.
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%
Suçlu CPU bir sürü locally binding inhibit-modification-hooks
to t
around this code zaman ve bellek kurtarabilirim gibi görünüyor yani 12**, olduğunu görebilirsiniz.
Ayrıca Emacs Lisp Profiler kullanabilirsiniz. Bu oldukça altında belgelenmiş: okumak zorundasın yorum elp.el
ayrıntılar, ama temel olarak çalıştırın elp-instrument-package
açmak için profil oluşturma için tüm fonksiyonları ile belirli bir önek ve sonra elp-results
sonuçları görmek için.
İşte M-x elp-instrument-package RET c- RET
C 4.000 hatları fontifying, yazıp elp-results
(ve ara hesaba göre sırala elp-sort-by-function
kullanarak) çalıştırdıktan sonra: bazı tipik çıktı
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
...
Özellikle senin durumunda profiler hatalı olduğunu bilmiyorsun çünkü hemen yardım etmiyor. Ama eğer bir tahmin (veya debug-on-quit
bunu bulmak için kullanın) eğer profiler ayrıntılı bir şekilde sorunu teşhis yardımcı olabilir.
İPhone / için hızlı ve Yalın bir PDF G...
Nasıl Emacs yazı tipi boyutunu ayarlam...
En iyi İpuçları kodu belgelemek için d...
Hata ayıklama için ipuçları .debug kur...
Nasıl Emacs bir yeni satır ile bir kar...