Перервати оцінку та спостерігати за поточним стеком у відладчику emacs-lisp?


17

Якщо деяка функція emacs-lisp, наприклад, гачок основного режиму, займає більше часу, ніж очікувалося, я б хотів перервати її і подивитися на поточний стек. В ідеалі я також хотів би мати можливість переглядати змінні значення тощо, у налагоджувачі. Я не кажу про код, який я навмисно виконую в режимі emacs-lisp, а про код, який виконується в звичайній роботі emacs.

Як я можу перервати виконання коду emacs-lisp безпосередньо в emacs? Я не знаю наперед, яку функцію мені потрібно налагодити.

Наприклад, введення тексту C-g, хоча воно перериває виконання, також мені нічого не говорить про те, яка функція була перервана.

Відповіді:


18

Ви можете C-gзапустити налагоджувач, включивши debug-on-quit. Просто роби

M-x toggle-debug-on-quit

Тепер кожного разу, коли ви потрапите, C-gви отримаєте зворотній зв'язок того, що відбувалося. Цей зворотний бік є інтерактивним, тому ви можете продовжувати dпереходити через цю функцію , і ви можете почати рух c. (Спробуйте, це легше побачити, ніж прочитати).

Це той самий зворотній шлях, який ви отримуєте, додаючи (debug)всередину свого коду. Ось коротка публікація в ньому та відповідна сторінка керівництва Elisp .


(лагідно каже hello);) Дивовижна зауваження, що налагоджувач є інтерактивним - я ніколи не думав це перевірити :)
Шон Аллред

@SeanAllred так, я дізнався лише пару тижнів тому.
Малабарба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.