Dondurulmuş Emacs hata ayıklama


48

E-postalarım için mew kullanıyorum. SMTP için TLS'yi e-posta sağlayıcımla kullanmam gerekiyor. Ancak bunu çağırmaya çalıştığımda Emacs donuyor.

Emacs paketleri hakkında daha fazla bilgi edinmek için bu fırsatı değerlendirmek istiyorum. Bu konuda hata ayıklamaya nasıl devam edebilirim? Common Lisp'te olduğu gibi bir tür yerleşik hata ayıklayıcı var mı? Günlük kaydı kullanabilir miyim?


3
Bunu nasıl çağırdın? Lisp'te tanımlanmış bir Emacs komutunu kullanıyorsa, (1) komutu tanımlayan kaynak kodunu yükleyebilir, (2) kullanın M-x debug-on-entry THE-COMMAND, sonra d(veya bazen cbazı adımları atlamak için) kullanarak hata ayıklayıcısını adımlandırabilirsiniz . Kaynak kodunu başka bir çerçevede açık tutun, böylece hata ayıklayıcının ne yaptığını takip edebilirsiniz. Burada gördüğünüzü veya bir Emacs hatası önerdiğini düşünüyorsanız, onu kullanarak bildirin M-x report-emacs-bug.
Drew

Yanıtlar:


44

Başvurmadan önce gdb, eğer bir Unix-y işletim sistemi kullanıyorsanız, diğer cevapta belirtilen dosyada SIGUSR2belgelenen Emacs işlemine göndermeyi deneyebilirsiniz DEBUG.

$ kill -SIGUSR2 <emacs_pid_goes_here>

Bu, Emacs'ın mevcut döngüsünden Lisp hata ayıklayıcısına geçmeye çalışmasını sağlar.

Veya emacs pid'yi elle yazmadan bu tek kalemi kullanın:

$ ps aux | grep -ie emacs | grep -v grep | awk '{print $2}' | xargs kill -SIGUSR2

Alternatif olarak, eğer killallmevcutsa:

$ killall -USR2 emacs

1
İki kez yapmak zorunda kaldım (peki, tekrar denemeden önce 1 saniyeden fazla bekleyebilirdim :-). Her neyse, sorunu belirledi (uzun bir satır için çok yavaş bir yazı tipi kilidi işleme).
Stéphane Gourichon,

font-lock'un Emacs'ı asmasıyla bilinir - bir eşleştirici tetikleyici ancak noktayı ileri doğru hareket ettirmezse, sonsuza dek yeniden tetiklenir.
Lindydancer

vay, bu harikaydı. Sorunuma neyin sebep olduğunu hala bilmiyorum ama bu numara bir cankurtaran, teşekkürler!
Matt

3
Sistemimde oneliner 'killall -USR2 emacs' ile basitleştirilebilir (elbette birden fazla Emacs işleminiz varsa kaçının).
YoungFrog

1
Bunun için htop ( en.wikipedia.org/wiki/Htop ) öner . sinyali /aramak emacsve kgöndermek için Mac'teki Activity Monitor bunu da yapabilir (menüden: Görüntüle | İşleme Sinyal Gönder).
Lassi

36

Vurduğunuzda donma kaybolursa C-g, dahili hata ayıklayıcıyı kullanabilirsiniz. Tür M-x toggle-debug-on-quitmesajı göndermeden önce, vurmak C-go donduğunda ve incelemek *Backtrace*çıkageldi tampon.

Eğer C-gişe yaramazsa, dondurma muhtemelen C kodunda gerçekleşir ve böyle bir harici hata ayıklayıcı kullanmanız gerekir gdb. Bunun nasıl yapılacağı hakkında bazı ipuçları veren dosyayı C-h C-dgörmek için tıklayın DEBUG. ( DEBUG dosyasını Emacs depo web arayüzünden de okuyabilirsiniz .) Bu cevapgdb , Emacs ile nasıl kullanılacağı hakkında daha fazla ayrıntıya girer .


Sen vurmak gerekebilir C-gbirkaç kez: C-g C-g C-g.
Drew

@Drew Birkaç kez vurmanın gerekli olduğunu da farkettim. Neden biliyor musun?
Wilfred Hughes,

2
Evet. Emacs kılavuzunaQuitting bakın , düğüm . Bunu nasıl buldum? C-h r i, sonra "Cg" yazın ve tıklayın RET.
Drew
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.