4

你怎么能去调试一个涉及defadvice的错误?

搜索解决方案我能找到的只是建议不要使用 defadvice,因为调试困难。阿门,但其他人的坏习惯无处不在,我总是遇到我什至无法开始追踪的错误。

4

2 回答 2

8

我还能想到的另一件事:

  1. 临时重命名defadvicedefadvice-old.

  2. 写下这个新版本defadvice


(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>>)一旦您需要它,它将在使用宏的文件的文件中具有位置。
于 2013-07-09T07:13:32.730 回答
3

一种选择是让通知主体调用一个函数来完成它的工作,然后您可以改为调试该函数。

请注意,您可以评估(ad-deactivate 'function)以停用指定的所有建议function(这会将函数恢复为其未建议状态)。如果某些建议在您尝试追踪它时给您造成严重问题,这可能会有所帮助。

于 2013-07-09T03:20:33.907 回答