【发布时间】:2016-03-14 14:18:58
【问题描述】:
某些 elisp init 函数错误地设置了变量 'yas-sn-p-dirs'。
有没有办法拥有调试模式,以获取最终修改此值的所有堆栈跟踪的日志?
【问题讨论】:
-
不是您问题的答案,但源代码的 grep 需要 2 秒,并为您提供对
yas-snippet-dirs的所有引用。从那里,您可以进入并修改您不喜欢的任何内容或创建新函数或使用建议等。在我看来,实际上不需要调试模式或堆栈跟踪来处理 grep 可以在一瞬间完成的事情一只眼睛。 -
是的,这就是我所做的
grep -r -n "yas-snippet-dirs" *。但由于这些变量的变化是在“代码即数据”风格的回调中,我不能只是在其中设置一个断点,或者至少我是这么想的.. -
这些引用都没有内置到 C 代码库中。它们都是用 Lisp 编写的以扩展名
.el结尾的纯文本文件。直接进入并修改它们是相当直接的,然后在你完成后M-x byte-compile-file。如果您想在不修改源代码的情况下更改某些内容,那么您只需在.emacs文件中的(require ...)库,并在下面放置具有相同名称的修改后的函数。不需要高级调试/gdb 技能。也许您只是部分安装了 Emacs,而没有以.el结尾的源代码 Lisp 文件? -
或者,也许你所有的 Lisp 源代码文件都是
.gz压缩的,而你的搜索正在跳过它们。在构建 Emacs 之后,我执行的最后一步是递归 gunzip -k -f -r 以在需要时能够 grep.el文件出现。在您的情况下,也许安装的第三方 Lisp 库也已被压缩并且超出了基本的 grep?如果是这样,只需 gunzip 他们。 -
不,我可以很好地 grep,但我的意思是代码出现在具有
(use-package yasnippet :commands (yas-global-mode yas-minor-mode) :init (progn .... (push 'yas-installed-snippets-dir yas-snippet-dirs) ...的数据结构中,所以它不是我知道的函数,或者至少我不知道。它的代码作为数据。它的解释是由稍后解释的代码触发的