Tôi đã gặp phải một vấn đề là khu vực bị vô hiệu hóa (ở chế độ đánh dấu thoáng qua). Hàm deactivate-mark
được gọi và tôi muốn tìm hiểu nó được gọi từ đâu (và tại sao).
Tôi đã thử M-x debug-on-entry RET deactivate-mark
và nó dừng lại nhưng tôi không tìm ra cách nào để tìm ra người gọi. Toàn bộ stacktrace được hiển thị là:
Debugger entered--entering a function:
* deactivate-mark()
Tôi đã thử M-x edebug-eval-defun
nhưng Edebug cũng không hiển thị người gọi.
Làm thế nào để tôi tìm hiểu tại sao (từ đâu) deactivate-mark
được gọi là? Tôi đang tìm kiếm tiêu đề backtrace hoặc stacktrace.
BIÊN TẬP:
Một advice-add
mẹo:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
sản xuất nil
trong *Messages*
.
Chỉnh sửa: thêm thông tin về deactivate-mark
: http://emacshorrors.com/posts/deac activate-mark.html
deactiveate-mark
và sử dụng chức năng tư vấn của mình backtrace-frames
để có được chế độ xem toàn bộ ngăn xếp cuộc gọi nếu edebug không hiển thị những gì bạn mong đợi.
advice-add
và backtrace-frame
. Nó không giúp được gì.
self-insert-command
và "lệnh tự chèn là một hàm tích hợp tương tác trong 'mã nguồn C'." Điều này, cùng với các hành vi khác được ghi nhận cho đến nay, cho thấy rằng người ta sẽ phải gỡ lỗi gdb
.
emacs -Q
, bật gỡ lỗiM-x debug-on-entry deactivate-mark
, kích hoạt đánh dấuC-<SPC>
, nhập một ký tự.