ฉันพบปัญหาว่าภูมิภาคปิดใช้งาน (ในโหมดเครื่องหมายชั่วคราว) deactivate-mark
มีการเรียกใช้ฟังก์ชั่นและฉันต้องการทราบว่าถูกเรียกใช้จากที่ไหน (และทำไม)
ฉันพยายามM-x debug-on-entry RET deactivate-mark
แล้วก็หยุด แต่ฉันไม่พบวิธีการโทรหา stacktrace ที่แสดงทั้งหมดคือ:
Debugger entered--entering a function:
* deactivate-mark()
ฉันพยายามM-x edebug-eval-defun
แต่ Edebug ไม่แสดงผู้โทรด้วย
ฉันจะทราบได้อย่างไรว่าเหตุใดจึงdeactivate-mark
มีการเรียก(จากที่ใด) ฉันกำลังมองหาฟังก์ชั่น backtrace หรือ stacktrace
แก้ไข:
advice-add
เคล็ดลับ:
(defun message-show-backtrace ()
(message "%s" (backtrace-frame 10)))
(advice-add deactivate-mark :before #'message-show-backtrace)
ผลิตในnil
*Messages*
แก้ไข: ข้อมูลเพิ่มเติมเกี่ยวกับdeactivate-mark
: http://emacshorrors.com/posts/deactivate-mark.html
deactiveate-mark
และในฟังก์ชั่นคำแนะนำของคุณใช้backtrace-frames
เพื่อรับมุมมองของสายการโทรทั้งหมดถ้า edebug ไม่แสดงสิ่งที่คุณคาดหวัง
advice-add
backtrace-frame
มันไม่ได้ช่วยอะไร
self-insert-command
และ "self-insert-command เป็นฟังก์ชันในตัวแบบโต้ตอบใน 'ซอร์สโค้ด C' พร้อมกับพฤติกรรมอื่น ๆ gdb
ตั้งข้อสังเกตเพื่อให้ห่างไกลให้เห็นว่าหนึ่งจะต้องแก้ปัญหาด้วย
emacs -Q
เปิด debugM-x debug-on-entry deactivate-mark
เปิดใช้งานเครื่องหมายC-<SPC>
พิมพ์อักขระ