如何调试defadvice

时间:2013-07-09 03:08:32

标签: emacs

如何使用涉及的defadvice来调试错误?

搜索解决方案我可以找到的建议是不要使用defadvice,因为调试困难。对此不以为然,但是到处都是其他人的不满,我总是遇到虫子,我甚至无法开始追查。

2 个答案:

答案 0 :(得分:8)

我能想到的另一件事是:

  1. defadvice临时重命名为defadvice-old

  2. 撰写此新版defadvice


  3. (defmacro defadvice (function args &rest body)
      `(progn
         (put ',(cadr args) 'source-position
              (cons byte-compile-current-file byte-compile-read-position))
         (defadvice-old ,function ,args ,@body)))
    
    1. 一旦需要,检查(symbol-plist <<name of advice>>),它将在使用该宏的文件的文件中有位置。

答案 1 :(得分:3)

一个选项是让建议体调用一个函数来完成它的工作,然后你可以调试函数。

请注意,您可以评估(ad-deactivate 'function)以取消激活指定function的所有建议(这会将该功能还原为其未经修改的状态)。如果某些建议在您尝试追踪时会导致严重问题,这可能会有所帮助。