Kei*_*awa 16 debugging emacs elisp config initialization
有时当我打开Emacs时,Emacs初始化失败.
那是因为.emacs
或init.el
文件有bug.(我的错误通常来自于错误输入.)
我想在.emacs
或找到bug init.el
.有没有办法做到这一点?
Dre*_*rew 20
要找出你的init文件(~/.emacs
)的哪一部分导致你看到的行为,递归地将你的init文件平分:首先注释掉一半,看看哪一半负责,然后是3/4,看看哪个季度负责. ..
要注释掉一个文本区域(例如,您选择的连续行),我建议comment-region
(我绑定C-x C-;
).使用数字前缀arg,它使用了许多;
注释字符.使用普通前缀arg(C-u
),它取消注释区域而不是注释它.
您也可以使用命令行开关启动Emacs --debug-init
.这将导致在Emacs启动期间引发错误时打开调试器,包括在加载init文件时.调试器回溯告诉您哪个评估引发了错误(调用了哪个函数),它会显示哪个函数调用了引发错误的函数,哪个函数调用了该函数,依此类推.
当您知道哪个函数是问题时,如果需要,您可以通过(debug-on-entry 'THE-FUNCTION)
接近init文件的开头来调试其评估.这将在输入函数时打开调试器,而不是仅显示引发错误时发生的情况.然后,您可以使用d
(或c
跳过一个步骤)逐步调试调试器,以查看出错的地方.
如果您希望从某个断点开始逐步执行该函数,则将定义函数的源代码复制到init文件,然后插入(debug)
要打开调试器的位置.
与往常一样,Emacs手册是您的朋友.例如,请参阅Checklist
Emacs手册中的节点Invoking the Debugger
和Elisp手册中的节点.
还有另一个调用程序edebug
,也称为手册中的文档.有些人更喜欢它debug
.(我更喜欢debug
.)两者都很好.
如果您已经加载了Emacs Lisp源文件而不是它们的字节编译版本,那么使用调试器通常会提供更多信息.如果您使用调试器开始调查特定问题,则可能需要先加载有问题的*.el
(非*.elc
)文件.
bio*_*man 10
我在elisp bug hunter https://github.com/Malabarba/elisp-bug-hunter上取得了巨大的成功.
最常见的问题是无法匹配的括号,加载失败的包:
自动错误搜索
如果您的Emacs init文件在启动期间发出错误信号,但您不知道原因,则只需发出
M-x bug-hunter-init-file RET e
而Bug Hunter会为你找到它.请注意,您的init.el(或.emacs)必须是幂等的才能工作.
互动狩猎
如果Emacs启动时没有错误但是某些内容无法正常工作,请调用相同的命令,但选择交互选项:
M-x bug-hunter-init-file RET i
Bug Hunter将多次启动一个单独的Emacs实例,然后每次都会询问您该实例是否存在问题.这样做大约5-12次后,你会得到结果.
归档时间: |
|
查看次数: |
7748 次 |
最近记录: |