关于 elisp debug

如果一个函数的代码巨长,对有些局部变量的值有疑问,然后想检查其中的局部变量的值,大家一般都是怎么做的呢? edebugger 只能找到出错的位置,但是没有办法显示变量的值。我现在的做法是对感觉可疑的变量做如下处理:

(some-fuction (prog1 var (message "%s" var)))

就是在 some-fuction 调用 var 变量之前,显示一下 var 的值,大家是怎么做的呢?

C-u C-M-x (Edebug)

想观察 some-fuction 的参数可用 trace-function

5 个赞

遇到奇怪的问题,在Mac中,trace-function没有输出,同样的操作在Linux中有输出。

是不是,在Mac环境中要进行特殊设置?

跟平台没关系,被 trace 了的函数只要调用了,就会给出参数和返回值。

有时候其实直接print最方便

我最常用的就是 (message ...)

配合 advice (:before / :after / :around / :overide) 各种「截胡」手段。

不过如果在post-command-hook打印信息会堵塞minibuffer导致无法使用,这时候就要用用自制函数打印到其他buffer。

给我的scratch 打打广告

Stop your spam advertising

打广告就算了,还要让别人自己搜索。小伙子做人要厚道 :roll_eyes:

M-x trace-function 也是用 Advice 实现的,打印参数和返回值,想想应该很容易实现。

谢谢你记得我

找bug比找链接可难多了

我记得之前看到过emacs加了一个跟踪变量的功能,找了一下:Watching variables

读完以后发现这个功能限制很多,用处不是很大。

用这个更好吧? debug-on-variable-change

嗯,不过用的都是add-variable-watcher,之前说的限制还在。

这个的文档还有个拼写错误,watcher写成watch了。

edebug不能满足你需求吗?message也是最常用手段。

嗯,这是只有26+才行。最近用了些,不知道效率如何。