Как отменить `edebug-defun`?

12

Как мне отменить эффекты edebug-defun? Другими словами, как мне отменить директиву, которая вызывает edebugпереход в режим отладки при вызове определенной функции?

Кроме того, я действительно хотел бы знать, где ответ на этот вопрос находится в документации. Я искал его гораздо дольше, чем можно было бы подумать ...

KJo
источник

Ответы:

15

От (info "(elisp) Instrumenting"):

   To remove instrumentation from a definition, simply re-evaluate its
definition in a way that does not instrument.  There are two ways of
evaluating forms that never instrument them: from a file with `load',
and from the minibuffer with `eval-expression' (`M-:').

IOW, простой способ - использовать C-M-xбез префиксного аргумента (или с префиксным аргументом, если вы его edebug-all-defsустановили).

YoungFrog
источник
Благодарность! Увидев ответ, я теперь абсолютно уверен, что единственный способ найти ответ - это линейный поиск по всей документации Emacs и Elisp.
kjo
Я хотел бы, чтобы был простой способ удалить инструменты из всех определений (даже если они разбросаны по нескольким файлам) одновременно, но я не знаю ни одного.
YoungFrog
@kjo Я нашел это, открыв раздел edebug в руководстве по elisp и просматривая разделы. Знание того, что «эффекты edebug-defun» называют «инструментами», безусловно, помогло.
YoungFrog
2
@kjo Также, если вы сообщаете об ошибке ( M-x report-emacs-bug), говоря, что вы на самом деле пытались найти свой ответ, документация может быть улучшена.
YoungFrog
8

Другими словами, как мне отменить директиву, которая заставляет edebug переходить в режим отладки при вызове определенной функции?

Вы можете получить этот эффект без удаления инструментов, установив edebug-initial-modeв go. Таким образом, вы остановитесь только в edebug, если установлена ​​точка останова. Начиная с Emacs 25.1, вы можете сделать это быстро с помощью edebug-set-initial-mode:C-x C-a C-m g

(info "(elisp) Edebug Execution Modes")

‘g’
     Go: run until the next breakpoint (‘edebug-go-mode’).  *Note
     Breakpoints::.

[...]

When you enter a new Edebug level, the initial execution mode comes
from the value of the variable ‘edebug-initial-mode’ (*note Edebug
Options::).  By default, this specifies step mode.

[...]

Command: edebug-set-initial-mode

This command, bound to C-x C-a C-m, sets edebug-initial-mode. It
prompts you for a key to indicate the mode. You should enter one of
the eight keys listed above, which sets the corresponding mode.
npostavs
источник