关于 elisp debug


#1

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

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

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


#2

C-u C-M-x (Edebug)

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


#3

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

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


#4

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


#5

有时候其实直接print最方便


#6

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

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


#7

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


#8

给我的scratch 打打广告


#9

Stop your spam advertising

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


#10

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


#11

谢谢你记得我

找bug比找链接可难多了


#12

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

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


#13

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


#14

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

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


#15

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


#16

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