Me encontré con un problema de que la región está desactivada (en modo de marca transitoria). Se deactivate-mark
llama a la función y me gustaría saber de dónde (y por qué) se llama.
Lo intenté M-x debug-on-entry RET deactivate-mark
y se detiene pero no encontré la manera de averiguar quién llamaba. Todo el seguimiento de pila mostrado es:
Debugger entered--entering a function:
* deactivate-mark()
Lo intenté M-x edebug-eval-defun
pero Edebug tampoco muestra a la persona que llama.
¿Cómo puedo saber por qué deactivate-mark
se llama (de dónde) ? Estoy buscando la funcionalidad de traza inversa o traza de pila.
EDITAR:
Un advice-add
truco:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
produce nil
en *Messages*
.
Editar: más información sobre deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
emacs -Q
, active la depuraciónM-x debug-on-entry deactivate-mark
, active la marcaC-<SPC>
, escriba un carácter.deactiveate-mark
y utilizar su función de asesoramientobacktrace-frames
para obtener una vista de toda la pila de llamadas si edebug no muestra lo que espera.advice-add
ybacktrace-frame
. No sirvió de nada.self-insert-command
y "auto-inserción-comando es una función interactiva incorporada en 'código fuente C'". Esto, junto con el otro comportamiento observado hasta ahora, sugiere que habrá que depurargdb
.Respuestas:
De
command_loop_1
adentrokeyboard.c
.Ese parece ser el único lugar donde
Qdeactivate_mark
se llama en todossrc/*.c
. Así que supongo que esto es con lo que te estás encontrando.Tenga en cuenta, no soy un experto en Emacs C. I hurgó con
gdb --args src/emacs -Q
después de leer Cómo compilar emacs con símbolos de depuración? .fuente