Я столкнулся с проблемой, что регион деактивирован (в режиме переходных меток). Функция 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
deactiveate-mark
и в своей функции совета использовать backtrace-frames
для просмотра всего стека вызовов, если edebug не показывает то, что вы ожидаете.
advice-add
и backtrace-frame
. Это не помогло.
self-insert-command
и «self-insert-command - это интерактивная встроенная функция в« исходном коде C »». Это, вместе с другим поведением, отмеченным до сих пор, предполагает, что с ним придется отлаживать gdb
.
emacs -Q
, включите отладкуM-x debug-on-entry deactivate-mark
, активируйте отметкуC-<SPC>
, введите символ.