Emacs入门技巧: 排错

人在江湖走,岂能不挨刀。今天人生又完整了一点:Emacs出现运行错误。一番折腾,正好学会一点简单的排错技巧。

本来 JDE运行得上好。我把所有相关文件送入SVN后(花了那么多精力配置Emacs,不把心血放进版本控制软件加每日多次冗余备份,好比 吴英真地披挂上10亿珠宝,孤身到广州火车站遛弯儿一样不靠谱),重启Emacs却得到如下错误:error: JDEE plugin Lisp file jde-.svn.el missing。在JDE安装目录下做全文搜索,没有这啥jde-.svn.el文件。也没有任何一份*.el代码含有jde-.svn.el的字样。考虑到Lisp的动态特性,以及.svn酷似SVN文件树下的元数据目录名,开始猜测JDE的某个函数扫描某些文件夹,把里面所有的文件都当成插件载入。当然,俺是程序员,不会像黎叔一样拿比人中黄还有想象力的猜想当证明,满世界找人决斗博取同情。排错的过程如下:
 
  1. 根据Emacs的提示,用emacs –debug-init启动Emacs。或者在初始文件里加入这句:(setq debug-on-error t)。setq是Emacs Lisp的关键词,表示设置一全局变量。那个不起眼的“t”相当于Java里的true。有了这句,以后Emacs遇到问题,就自动打开内置调试器,创建一*backtrace*窗口,并打印出跟踪结果。喜欢GUI的老大还可以用Options里的菜单选项:


  2. 打印出的错误报告如下。不用管那些“byte-code”开头的行。它们表示一段编译过的*.el被载入,没有什么实质性的帮助。我们的目的就一个:找到出错的地方。这段消息类似Java里的stack trace,每一行是一例函数调用。从下到上,函数被依次调用。比如下面两行就表示jde-pi-plugins()先被调用,接着jde-pi-plugins()调用jde-pi-plugin(“.svn”)
     jde-pi-load-plugin(".svn")
     jde-pi-load-plugins()

      
      
     
  3. 嗯,看到jde-pi-load-plugin(“.svn”),应该有8分希望了。现在的问题是,函数定义到底在哪个文件里。Emacs Lisp里*.el一般是被require或者load-library这俩函数加载。所以我们自然找require(jde-plugins)里的jde-plugins.el:

  4. 打开jde-plugins.el后,C-s,查找函数定义的开头”(defun jde-pi-load-plugins”,果然找到了函数定义:


  5. 其实不用知道该函数的细节,抓住关键就行了。很明显,下面这段代码过滤掉常见的与plugin无关的目录


  6. 我们照做就成,添加一行(not (string= file-name “.svn”)):

  7. 删除掉jde-plugins.elc,重启Emacs。错误消失。大功告成。
  8. 有耐心看到这里的老大,俺奉上饭后甜点:要不是为了学习工具的话,这样做就够了:google JDE svn,答案就出现老。再次证明:菜鸟的问题,不算问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值