Debugging 跟踪设置变量的人';yas代码片段dirs';在elisp中

Debugging 跟踪设置变量的人';yas代码片段dirs';在elisp中,debugging,emacs,elisp,Debugging,Emacs,Elisp,某些elisp init函数错误地设置了变量“yas snippet dirs” 有没有一种方法可以设置调试模式,以获取最终修改此值的所有堆栈跟踪的日志?没有这种方法,但您可能会发现它很有用。在最近足够多的Emacs中,您可以使用调试监视: M-x debug-watch RET yas-snippet-dirs RET 我们应该做到这一点。如果您需要在早期(在您可以输入交互式命令之前)添加观察者,那么将 (debug-watch 'yas-snippet-dirs) 在您的~/.emacs

某些elisp init函数错误地设置了变量“yas snippet dirs”


有没有一种方法可以设置调试模式,以获取最终修改此值的所有堆栈跟踪的日志?

没有这种方法,但您可能会发现它很有用。

在最近足够多的Emacs中,您可以使用
调试监视

M-x debug-watch RET yas-snippet-dirs RET
我们应该做到这一点。如果您需要在早期(在您可以输入交互式命令之前)添加观察者,那么将

(debug-watch 'yas-snippet-dirs)

在您的
~/.emacs

早期的某个地方,不是对您的问题的回答,而是源代码的一个grep将花费2秒钟,并为您提供对
yas snippet dirs
的所有引用。从那里,你可以进入并修改任何你不喜欢的东西,或者创建新函数,或者使用建议等等。在我看来,真的不需要调试模式或stacktraces来处理grep一眨眼就能完成的事情。是的,这就是我所做的
grep-r-n“yas snippet dirs”*
。但是,由于这些变量的变化是以“代码即数据”的方式回调的,我不能在其中设置断点,至少我是这么想的。这些引用都没有内置到C代码库中。它们都是用Lisp编写的以扩展名
.el
结尾的纯文本文件。直接进入并修改它们,然后在完成后
M-x字节编译文件
,这相当简单。如果您想在不修改源代码的情况下更改某些内容,则只需将库
(require…
放入
.emacs
文件中,并将修改后的同名函数放在下面即可。不需要高级调试/gdb技能。可能您只是部分安装了Emacs,而没有以
.el
结尾的源代码Lisp文件?或者,可能您所有的Lisp源代码文件都是
.gz
压缩的,您的搜索正在跳过它们。在构建Emacs之后,我执行的最后一个步骤是递归gunzip-k-f-r,以便在需要时能够grep
.el
文件。在您的情况下,可能安装的第三方Lisp库也已被压缩,并且超出了基本的grep?如果是这样,只需压缩它们。不,我可以很好地grep,但我的意思是代码出现在具有
(使用包yasnippet:commands(yas global mode yas minor mode):init(progn…(push'yas installed snippets dir yas snippet dirs)的数据结构中…
因此,我知道它不是一个函数,但我不知道是否放了断点。它是作为数据的代码。它的解释是由稍后解释的代码触发的