Ketika kesalahan terjadi di dalam proses sentinel atau selama penguncian font, maka Emacs tidak menunjukkan backtrace meskipun debug-on-error
sebelumnya diaktifkan.
Saya mengerti mengapa kesalahan ini ditangkap, kesalahan yang sama mungkin dipicu lagi saat mencoba menyajikan backtrace. Namun ketika saya ingin benar-benar men-debug kesalahan itu tidak sangat membantu. Saya lebih suka mengambil risiko Emacs menjadi tidak responsif daripada harus bekerja dari ini:
error in process sentinel: Wrong type argument: stringp, nil
Lagipula saya bisa memulai instance kedua, jika yang pertama mulai menjadi gila. Konteks yang sedikit lebih akan membantu ketika ada banyak tempat di mana kesalahan seperti itu secara teoritis dapat terjadi di sentinel.
Jadi bagaimana saya bisa memaksa Emacs untuk menunjukkan backtrace bahkan dalam kasus di mana debug-on-error
tidak berpengaruh?
Jawaban:
Untuk penjaga proses, saya pikir tidak ada alasan yang bagus. TKI saya pikir itu hanya fitur yang hilang, jadi saya sarankan Anda
M-x report-emacs-bug
.Untuk font-lock, masalahnya lebih rumit karena apa yang sebenarnya terjadi adalah bahwa kesalahan dipicu selama jit-lock, yaitu selama redisplay, dan kami tidak dapat dengan mudah memasuki debugger pada saat itu (IIRC pada titik tertentu Gerd mencoba membuat ini bekerja, tetapi masih ada beberapa masalah serius). Jadi, Anda dapat men-debugnya dengan salah satu cara berikut:
M-x jit-lock-debug-mode
yang mengubah jit-lock untuk dijalankan segera setelah ditampilkan ulang, sehingga kita dapat memasuki debugger.M-: (setq font-lock-support-mode nil) RET
dan kemudian menonaktifkan + mengaktifkan kembali font-lock. Dengan cara ini font-lock tidak menggunakan jit-lock lagi, jadi ini berjalan selama perintah pengguna daripada selama tampilan ulang berikutnya.sumber
debug-on-error
tampaknya berfungsi dengan baik pada sentinel proses.--eval
alih-alih--debug-init
. Juga solusinya tidak membantu saya jatuh ke dalam backtrace di aktual saya.emacs.d