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-markvà 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-defunnhư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-addmẹo:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
sản xuất niltrong *Messages*.
Chỉnh sửa: thêm thông tin về deactivate-mark: http://emacshorrors.com/posts/deac activate-mark.html
deactiveate-markvà 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-addvà backtrace-frame. Nó không giúp được gì.
self-insert-commandvà "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ự.