Bölgenin devre dışı bırakılmasıyla ilgili bir sorunla karşılaştım (geçici işaret modunda). İşlev deactivate-mark
çağrılır ve nereden (ve neden) çağrıldığını bulmak istiyorum.
Denedim M-x debug-on-entry RET deactivate-mark
ve duruyor ama arayanı bulmanın bir yolunu bulamadım. Görüntülenen yığın izinin tamamı:
Debugger entered--entering a function:
* deactivate-mark()
Denedim M-x edebug-eval-defun
ama Edebug da arayanı göstermiyor.
Neden (nereden) deactivate-mark
çağrıldığını nasıl öğrenebilirim ? Backtrace veya stacktrace işlevlerini arıyorum.
DÜZENLE:
Bir advice-add
numara:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
üretmektedir nil
içinde *Messages*
.
Düzenleme: hakkında daha fazla bilgi deactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
Tavsiye edebilir ve tavsiye işlevinizde backtrace-frames
edebug beklediğinizi göstermiyorsa tüm çağrı yığınını görmek için kullanın .
advice-add
ve backtrace-frame
. Yardım etmedi.
self-insert-command
ve "self-insert-command 'C kaynak kodu'nda " etkileşimli yerleşik bir işlev olduğunu belirtmek gerekir . Bu, şimdiye kadar kaydedilen diğer davranışlarla birlikte, bir kişinin hata ayıklaması gerektiğini göstermektedir gdb
.
emacs -Q
, hata ayıklamayı açınM-x debug-on-entry deactivate-mark
, işareti etkinleştirinC-<SPC>
, bir karakter yazın.