如何使用涉及的defadvice来调试错误?
搜索解决方案我可以找到的建议是不要使用defadvice,因为调试困难。对此不以为然,但是到处都是其他人的不满,我总是遇到虫子,我甚至无法开始追查。
答案 0 :(得分:8)
我能想到的另一件事是:
将defadvice
临时重命名为defadvice-old
。
撰写此新版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)))
(symbol-plist <<name of advice>>)
,它将在使用该宏的文件的文件中有位置。答案 1 :(得分:3)
一个选项是让建议体调用一个函数来完成它的工作,然后你可以调试函数。
请注意,您可以评估(ad-deactivate 'function)
以取消激活指定function
的所有建议(这会将该功能还原为其未经修改的状态)。如果某些建议在您尝试追踪时会导致严重问题,这可能会有所帮助。