การประเมินผลขัดจังหวะและสังเกตสแต็กปัจจุบันใน emacs-lisp debugger?


17

หากฟังก์ชั่น emacs-lisp เช่น hook ของโหมดหลักใช้เวลานานกว่าที่คาดไว้ในการเรียกใช้งานบางครั้งฉันต้องการขัดจังหวะและดูที่สแต็กปัจจุบัน โดยหลักการแล้วฉันต้องการดูค่าตัวแปรและอื่น ๆ ในโปรแกรมดีบั๊ก ฉันไม่ได้พูดเกี่ยวกับรหัสที่ฉันจงใจเรียกใช้งานในโหมด emacs-lisp แต่เป็นรหัสที่เรียกใช้ในการทำงานปกติของ emacs

ฉันจะขัดจังหวะการเรียกใช้โค้ด emacs-lisp โดยตรงใน emacs ได้อย่างไร ฉันไม่ทราบล่วงหน้าว่าฟังก์ชั่นใดที่ฉันต้องแก้ไข

ตัวอย่างเช่นการพิมพ์C-gในขณะที่มันขัดจังหวะการทำงานก็ไม่ได้บอกฉันว่าฟังก์ชั่นใดถูกขัดจังหวะ

คำตอบ:


18

คุณสามารถทำให้การเรียกดีบักโดยการเปิดC-g debug-on-quitแค่ทำ

M-x toggle-debug-on-quit

ตอนนี้ทุกครั้งที่คุณโจมตีC-gคุณจะได้รับข้อมูลย้อนหลังว่าเกิดอะไรขึ้น backtrace นี้เป็นแบบอินเทอร์แอคทีฟดังนั้นคุณจึงสามารถใช้งานฟังก์ชั่นต่างๆต่อไปdได้และคุณสามารถเริ่มต้นใช้งานcได้ (ลองเลยดูง่ายกว่าอ่าน)

นี่คือ backtrace เดียวกับที่คุณได้รับโดยการเพิ่ม(debug)เข้าไปในโค้ดของคุณ นี่คือการโพสต์บล็อกสั้น ในนั้นและที่เกี่ยวข้องหน้าคู่มือ Elisp


(พูดเบา ๆhello);) โปรดทราบว่าตัวดีบักเป็นแบบโต้ตอบ - ฉันไม่เคยคิดที่จะตรวจสอบ :) :)
Sean Allred

@SeanAllred ใช่ฉันเพิ่งค้นพบเมื่อไม่กี่สัปดาห์ที่ผ่านมา
Malabarba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.