Ich habe ein Problem festgestellt, dass die Region deaktiviert ist (im Transient-Mark-Modus). Die Funktion deactivate-mark
wird aufgerufen und ich möchte herausfinden, woher (und warum) sie aufgerufen wird.
Ich habe es versucht M-x debug-on-entry RET deactivate-mark
und es hört auf, aber ich habe keine Möglichkeit gefunden, den Anrufer herauszufinden. Die gesamte angezeigte Stapelverfolgung ist:
Debugger entered--entering a function:
* deactivate-mark()
Ich habe es versucht, M-x edebug-eval-defun
aber Edebug zeigt den Anrufer auch nicht an.
Wie finde ich heraus, warum (woher) gerufen deactivate-mark
wird? Ich suche nach Backtrace- oder Stacktrace-Funktionalität.
BEARBEITEN:
Ein advice-add
Trick:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produziert nil
in *Messages*
.
Bearbeiten: Weitere Informationen zu deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
emacs -Q
, DebugM-x debug-on-entry deactivate-mark
aktivieren, Markierung aktivieren, Zeichen eingebenC-<SPC>
.deactiveate-mark
und in Ihrer Beratungsfunktion verwendenbacktrace-frames
, um einen Überblick über den gesamten Aufrufstapel zu erhalten, wenn edebug nicht anzeigt, was Sie erwarten.advice-add
und hinzugefügtbacktrace-frame
. Es hat nicht geholfen.self-insert-command
und "Self-Insert-Command eine interaktive integrierte Funktion in 'C-Quellcode' ist." Dies, zusammen mit dem anderen Verhalten, das bisher festgestellt wurde, deutet darauf hin, dass man mit debuggen mussgdb
.Antworten:
Von
command_loop_1
inkeyboard.c
.Das scheint der einzige Ort zu sein, an dem
Qdeactivate_mark
in allen aufgerufen wirdsrc/*.c
. Ich vermute also, dass dies das ist, worauf Sie stoßen.Beachten Sie , ich bin kein Experte für Emacs C. Ich stocherte mit
gdb --args src/emacs -Q
nach dem Lesen Wie Emacs mit Debug - Symbolen zu kompilieren? .quelle