Я отлаживаю, почему происходит сбой emacs при использовании функции из пакета 1 . Целью этого процесса отладки является получение полезных данных для отправки с помощью M-x report-emacs-bug
.
Чтобы получить помощь по отладке сбоев emacs, я уже посмотрел Руководство по Emacs - Crashing и Emacs Manual - после сбоя , но они не помогли.
После аварии руководство относится к , emacs-buffer.gdb
но я понятия не имею , как его использовать. Прося Google о помощи, я наткнулся на этот вопрос emacs.SE и перекомпилировал emacs, используя -ggdb3
флаги.
У меня нет предыдущего опыта использования, gdb
поэтому я попробовал несколько неудачных попыток использовать emacs-buffer.gbd
файл.
Вот что я попробовал:
gdb -x /path/to/emacs-buffer.gdb
gdb
->file /path/to/emacs-buffer.gdb
gdb
->source /path/to/emacs-buffer.gdb
source /path/to/emacs-buffer.gdb
Кстати, emacs, скомпилированный с -ggdb3
флагом, загружается на 10 секунд дольше; раньше это было 5-6 секунд, сейчас около 16-17 секунд. Я знаю точные секунды из-за кода, который вычисляет это в моем init. Ожидается ли увеличение времени запуска?
Сноска 1: emacs постоянно вылетает, когда undo-tree
пытается восстановить историю отмен для определенного файла .org (которым я не могу поделиться публично). У меня есть (setq undo-tree-auto-save-history t)
. Этот сбой происходит только на emacs git master, а не на emacs 24.5. В emacs 24.5 undo-tree
выдает ошибку, утверждающую, что он не может загрузить историю отмены (даже если существует файл истории отмены), но, по крайней мере, сеанс emacs не завершается с ошибкой в этой версии.
undue-tree
проблем, но у нее есть более широкий потенциал .undo-tree
конкретного ответа, потому что знаю, что кому-то еще будет трудно воссоздать именно эту аварию. Также я не могу поделиться всем файлом org, который является единственным, который, кажется, вызывает этот сбой. Поэтому я применил толькоgdb
тег к этому вопросу. Я дал эту историю, чтобы ответы помогли мне отладить сбой emacs в целом, чтобы я мог подать полезный отчет об ошибках emacs .Ответы:
Самый простой способ отладить аварийное
gdb
завершение Emacs - запустить Emacs под , а затем сделать то, что воспроизводит аварийное завершение.Предполагая, что вы строите свой Emacs из исходного кода, вы должны перейти
CFLAGS="-O0 -g3"
к./configure
сценарию. Это заставляет компилятор C отключать оптимизацию (что может сбивать с толку при отладке) и активировать максимум отладочной информации в исполняемом файле. Запустите,make
чтобы собрать Emacs.Затем начните
gdb
сsrc
каталога вашего дерева Emacs:В OSX вы захотите перейти
--with-ns
к./configure
сценарию и запустить GDB на Emacs внутри созданного приложения:Причиной запуска из
src
каталога является наличие.gdbinit
файла, который устанавливает полезные определения функций GDB для отладки Emacs. Если этот файл был загружен, вы должны увидеть что-то вроде этого при запускеgdb
:Введите,
r
чтобы начать Emacs. Вы можете передать дополнительные аргументы в той же строке, напримерr --debug-init
.Затем попытайтесь заставить Emacs потерпеть крах. В случае сбоя вы должны увидеть примечание об этом
gdb
и снова останетесь в(gdb)
приглашении. Если Emacs не падает, но зависает, вы можете нажатьC-z
в терминале, в котором вы работаете,gdb
чтобы вернуться к приглашению.В командной строке введите,
bt
чтобы получить обратный след. В качестве бонуса, если.gdbinit
файл Emacs был загружен правильно, вы увидите обратный след Lisp после обратного следа C. Обе трассировки очень полезны для включенияM-x report-emacs-bug
.В
etc/DEBUG
файле в дереве Emacs содержится гораздо больше информации, включая информацию о том, как проверить состояние переменных и т . Д. Вы можете открыть его, введяC-h C-d
в Emacs, или прочитать его онлайн .источник
emacs-buffer.gdb
делает и как его использовать.src/
. Я нашел этоlib-src/
хотя, но это не сработалоgdb ./emacsclient -a '' -c
. Так что я нужна помощь в том , как передать те-a
и-c
арг в emacsclient вместо к БГД.