Я столкнулся с проблемой, что регион деактивирован (в режиме переходных меток). Функция deactivate-mark
вызывается, и я хотел бы выяснить, откуда (и почему) она вызывается.
Я попытался, M-x debug-on-entry RET deactivate-mark
и это останавливается, но я не нашел способа узнать звонящего. Вся отображаемая трассировка стека:
Debugger entered--entering a function:
* deactivate-mark()
Я пытался, M-x edebug-eval-defun
но Edebug тоже не показывает звонящего.
Как мне узнать, почему (откуда) deactivate-mark
называется? Я ищу функциональность backtrace или stacktrace.
РЕДАКТИРОВАТЬ:
advice-add
Трюк:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
производит nil
в *Messages*
.
Изменить: дополнительная информация о deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
emacs -Q
, включите отладкуM-x debug-on-entry deactivate-mark
, активируйте отметкуC-<SPC>
, введите символ.deactiveate-mark
и в своей функции совета использоватьbacktrace-frames
для просмотра всего стека вызовов, если edebug не показывает то, что вы ожидаете.advice-add
иbacktrace-frame
. Это не помогло.self-insert-command
и «self-insert-command - это интерактивная встроенная функция в« исходном коде C »». Это, вместе с другим поведением, отмеченным до сих пор, предполагает, что с ним придется отлаживатьgdb
.Ответы:
Из
command_loop_1
вkeyboard.c
.Кажется, это единственное место, где все
Qdeactivate_mark
это называетсяsrc/*.c
. Так что я думаю, что это то, что вы сталкиваетесь.Обратите внимание, я не специалист по Emacs C. Я пошарил с
gdb --args src/emacs -Q
после прочтения Как скомпилировать Emacs с отладочной? ,источник