Çökme Emacs daha iyi hata ayıklama?


9

Emacs (24.3.93.1), Finder'dan başlatılırsa iyi çalışır, ancak terminal sürümü başlatılırsa:

/Applications/Emacs.app/Contents/MacOS/Emacs -nw

Emacs şunlarla kilitleniyor:

Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw.

Sorunun nedeni init.el içindeki tek bir satırdan kaynaklanıyor gibi görünüyor,

(set-face-attribute 'default nil :font "Menlo-16")

Bu satır yorumlanırsa, Emacs'ın terminal sürümü de iyi başlayacaktır.

Kazanın nedenini tespit etmek birkaç saatimi aldı (init..el yarı yarıya azaldı).

Her halükarda Emacs'ın terminal uygulamasında belirtilen yazı tipi ve yazı tipi boyutu devralınacağının farkındayım (temelde, bu satır klipteki anlamlı değildir.)

  1. Genel olarak, çökmekte olan bir Emacs'da hata ayıklamanın daha iyi bir yolu var mı? Belki daha açıklayıcı bir mesaj yazdıracak bir tür cli hata ayıklayıcı kullanmak?
  2. Neden bu satır Emacs'ı cli aracılığıyla kilitliyor, ancak Finder'dan başlatıldığında değil?

gerçekten uçurumdan fırlatılıyor mu? veya soruna neden olan terminal sürümünü başlatmak? Set-face özniteliğinin çevresine bir hata yakalamayı denemek ister misiniz? (condition-case err (set-face-attribute ...) (hata ("Whoops!" mesajı))
nic ferrier

3
Hata raporu gönderin. Emacs lisp kodu nedeniyle asla çökmemelidir. Ama bu kullandığınız yapı ile ilgili bir sorun olabilir, resmi sürüm mü?
Malabarba

@ nic-ferrier: Şimdi init.el içinde sadece bir satır (condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))var , hala aynı hata mesajı ile aynı kilitlenme var. Diğer elisp kaynaklı mesajlar yok.
gsl

@ Malabarba: Birlikte çalıştık GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.orgdan emacsformacosx.com ve Emacs çökmez. Bu nedenle, sonraki sürümlerde bir hata olması gerekir. Hata raporu vereceğim.
gsl

1
@Malabarba belirtildiği gibi: Bir hata raporu File (hemen): M-x report-emacs-bug. Emacs geliştiricileri, sorunun ayıklanmasına yardımcı olmak için yapabilecekleriniz konusunda size yol gösterir.
Drew

Yanıtlar:


6

Bir dahaki sefere izlemenize yardımcı olmak için

Bu daha önce başıma geldi. string-to-intEmacs'ın çöktüğü bir durum vardı ve ben de kesin olarak saptamak saatlerimi aldı.
Maalesef daha güzel bir cevap veremiyorum, ancak Emacs çökmeleri C kodunun derinliklerinde gerçekleşiyor ve bu tür sorunları izlemek için herhangi bir yerleşik araç yok.

Sanırım hata ayıklama gdbmümkün, ancak etkinliği ile yeterliliğinize bağlı olacaktır gdb.

Gerçekten yapman gereken şey

Hata raporu gönderme

Saf elisp kodunun (bayt-derlenmemiş) hiçbir zaman Emacs'ı çökertmesi gerekmez. Bir askıya neden olabilir (bazı sonsuz döngüden dolayı) ve Emacs'ın belleğinin bitmesine neden olabilir. Ancak, bunun ötesinde, herhangi bir çökme bir hatadır .

M-x report-emacs-bug

Yaptığınız minimal çalışma örneğini, yapınızın ve sisteminizin bir açıklaması ile birlikte, tür geliştiriciler için yeterli yardım olmalıdır.


2
GDB kullanmak tek yol olacaktır. Her C çağrısını kendini yakalayacak bir şeyle sarmak için Emacs'a bir şeyler ekleyebiliriz, ancak bu her zaman ek yük olurdu. Emacs'ın çökmesi gerekmiyor, eğer öyleyse, bu hatayı özel olarak ele almalıyız, böylece artık yok. Yani evet, eğer kırılırsa, bir hata gönderin. Hata kesinlikle nerede bulmak için elbette gdb kullanın.
nic ferrier

4

Gdb ile hata ayıklamaya referans olarak, yapı ağacından src / temacs kullanmak isteyeceksiniz. Bu, hata ayıklayıcıyı karıştıran önceden boşaltılan elisp içermeyen Emacs.

gdb --args src/temacs -nw

1
Teşekkür ederim, mükemmel tavsiye (ve kolay değil de etrafında bulmak çok). Teşekkürler.
gsl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.