Как отладить Emacs lisp, который приводит к сбою Emacs / использованию 100% процессора? - PullRequest
6 голосов
/ 09 января 2012

Есть внешняя библиотека, с которой я работаю, которая часто привязывает мой процессор. Я хотел бы помочь автору исправить это (поскольку мне действительно нравится библиотека), но я не знаю, как правильно отлаживать сбой.

Какие-нибудь советы по отладке Emacs lisp? Имейте в виду, что когда происходит сбой, Emacs больше не работает, и мне приходится его убивать (поэтому решения в самом Emacs могут оказаться бесполезными).

Редактировать : Я должен уточнить, что он скомпилирован байтами, и эта проблема не всегда возникает для других, поэтому она может быть специфичной для моих файлов архитектуры / файлов инициализации. Хотя это определенно связано с этой библиотекой.

1 Ответ

6 голосов
/ 09 января 2012

Во-первых, всегда отлаживайте некомпилированную версию программы Emacs-Lisp, если только вы не уверены, что проблема вызвана байтовым компилятором.

Во-вторых, если код висит на Emacs, то кодвероятно, в бесконечном цикле с ограничением-выходом, не равным нулю.Поэтому первое, что нужно сделать, - это просмотреть исходный код библиотеки и изменить все ссылки запрета-выхода на что-то еще, чтобы Cg работал, чтобы остановить цикл.После этого загрузите библиотеку, установите для debug-on-quit значение t, и при нажатии Cg вы получите хорошую трассировку отладки, которая покажет, где зацикливается код.Оттуда отладка проблемы должна быть такой же простой, как и отладка любого другого бесконечного цикла.

...