debug那几个函数跟文件打开有关, 所以, 现在是:
- 无法打开文件, 一打开edebug就报错, 原因应该是debug的那几个函数执行到了, edebug找不到. 所以没法打开刚才调试的那个文件
- 无法退出emacs, 原因是kill-emacs-hook里有函数打开文件保存数据的操作
尴尬了. 除了把kill-emacs-hook设置为nil, 有没有其他办法? 比如怎样让edebug完全退出?不要再debug了?
debug那几个函数跟文件打开有关, 所以, 现在是:
尴尬了. 除了把kill-emacs-hook设置为nil, 有没有其他办法? 比如怎样让edebug完全退出?不要再debug了?
M-x edebug-all-defs
文档看不太懂, 下次试试. 你用过吗? 具体是什么功能?
Toggle edebugging of all definitions.
也就是全局打开/关闭edebug
试了一下, 不行, 它对应一个变量, 好像是影响edebug-defun
这些函数调用的时候的行为, 这些函数调用过之后好像就影响不了了.
edebug-all-defs
不是用来取消所有会被 Edebug 的函数,它的 Docstring 有些误导:
edebug-all-defs
is an interactive autoloaded compiled Lisp function in `edebug.el’.(edebug-all-defs)
Toggle edebugging of all definitions.
这个命令开关选项(变量) edebug-all-defs
,其用来控制 C-M-x
如何处理 C-u
:默认情况下 C-u C-M-x
是标记 Edebug,不带 C-M-x
是取消标记,打开这个选项会翻转这个行为,即 C-M-x
是 Edebug,而 C-u C-M-x
是取消。
把相应函数取消 debug,用命令 C-M-x
(M-x eval-defun
) 或 M-x eval-buffer
或函数 load
。
C-M-x
一个函数eval-buffer
一个Buffer 中的所有函数load
一个文件中的所有函数目前不知道有没有办法一次性取消不同文件中的所有函数的 debug。
这个功能感觉会挺有用。可以报个bug
I edebug(use edebug-defun) some functions in file.el and then close file.el. When I open a new file, emacs aborts and show a buffer with edebug error(It can’t find the original source buffer to debug).
Work-Around:重新打开 file.el,然后 eval-buffer
就 OK 了吧?
打不开,里面已经说了,没法打开文件,因为edebug调试了几个打开文件相关的函数,一打开文件edebug就报错
我还遇到过更坑的,就是edebug的执行结果和真正的执行结果不一样。所以我现在如果要debug,就乖乖用老的debugger。
直接(let (kill-emacs-hook) (kill-emacs))
问:
执行了(fset 'kill-emacs nil)
之后不能从emacs退出了!怎么办,在线等,急!
答:
不用top杀掉留着过年吗?
不是很好,很多会话相关的东西都不能保存了
这种bug应该上报了
打不开的话可以试试 load
,它用 C 实现的,也不可能被 Debug。
(load (locate-library "files"))
这些笨办法倒是能想到, 但是太麻烦了, 印象中好多次遇到这样的问题了, 有时候调试了好几个文件, 还要一个一个来load, 有时候是调试非load-path里的文件(比如我有个my-scratch.el文件), 有时候是在scratch写了临时测试函数并调试, 然后清空或者关闭了该buffer, 同时忘记了, 然后开始正常工作, 无意中一个操作触发了那个函数的edebug, 突然蹦出来错误. 手工处理很麻烦.
在邮件列表上问了一下, 其中一个开发者是一个一个 M-x load-library, 另外, 有人回复说emacs 27好像增加了一个这样的命令, 我测试一下.
emacs 27的NEWS:
*** New command 'edebug-remove-instrumentation.
This command removes Edebug instrumentation from all functions that
have been instrumented.
该命令可以在emacs26里面使用, 没有其他依赖, 亲测有效.