如何用defadvice调试错误?如何调试defadvice
寻找解决方案,我可以找到的建议是不要使用defadvice,因为调试困难。阿门对此,但其他人的defadvices无处不在,我总是遇到我甚至无法追查的错误。
如何用defadvice调试错误?如何调试defadvice
寻找解决方案,我可以找到的建议是不要使用defadvice,因为调试困难。阿门对此,但其他人的defadvices无处不在,我总是遇到我甚至无法追查的错误。
还有一件事我能想到的:
临时命名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>>)
,一旦你需要它,那就得所用的宏文件的文件中的位置。哦,这很聪明。你应该在其他答疑中交叉提出这个想法。 – phils
谢谢,优秀的黑客。这个想法应该以defadvice-defadvice的形式进入emacs。 –
@phils我知道一些在Emacs上工作的人是SO上的常客。也许他们中的一些人会介入/也许有一些陷入“defadice”记住咨询位置的陷阱。如果没有 - 这看起来值得功能要求。我可能会发一个。 – 2013-07-09 09:15:18
一种选择是让建议主体调用一个函数来完成它的工作,然后你可以调试该函数。
请注意,您可以评估(ad-deactivate 'function)
以取消激活指定的function
的所有建议(这会将该功能恢复为其未配准状态)。这可能会有所帮助,如果有一些建议会在您尝试追查时造成严重问题。
寻找defadvice的地方是我的第一个路障和[这个答案](http://stackoverflow.com/questions/10967367/how-can-i-locate-the-defadvice-for-an-在emacs中建议使用函数)表明一个明显的命令不存在。 –
您可以在'ad-defactivate'中放置一个断点,您首先加载Emacs,然后等待您的建议来触发它并从那里开始工作......这是很多麻烦,但是如果您只需要执行此操作一次... – 2013-07-09 06:38:38