如何调试标记和字体锁定期间的错误


10

当进程前哨内部或字体锁定期间发生错误时,即使debug-on-error先前已启用,Emacs也不会显示回溯。

我了解为什么会捕获这些错误,在尝试显示回溯时可能会再次触发相同的错误。但是,当我想实际调试该错误时,它并不是很有帮助。我宁愿冒着Emacs变得反应迟钝的风险,而不必这样做:

error in process sentinel: Wrong type argument: stringp, nil

毕竟,如果第一个实例开始变得疯狂,我可以开始第二个实例。从理论上讲,在很多地方可能发生此类错误的情况,多一点上下文将有所帮助。

那么,即使在debug-on-error没有影响的情况下,我如何强制Emacs显示回溯?


1
我已经看过emacs.stackexchange.com/questions/3552/…,但认为总体上应该有一个问题,而不仅仅是一个特殊情况。我也真的希望“ use printf”不是唯一的答案,因为那是我过去使用过的,并且不能令人满意,特别是如果错误是“无效的面部参考:some-face-that-i-absolutely-know -exists”,这可能是由我安装的几乎所有软件包触发的。
tarsius

该URL指向此问题,因此您的评论相当混乱,是故意的还是代表您的错误?
wasamasa 2014年

这就是我的意思:ttp://emacs.stackexchange.com/questions/1045/how-to-debug-startup-problem-if-debug-init-has-no-effect
tarsius

链接眼镜猴意:emacs.stackexchange.com/questions/1045/... UG-INIT-有-无影响
dcorking

Answers:


10

对于流程标记,我认为没有充分的理由。IOW我认为这只是一个缺少的功能,所以我建议您M-x report-emacs-bug

对于字体锁定,此问题比较棘手,因为真正发生的是在jit锁定期间(即在重新显示期间)触发了错误,并且我们当时无法轻易进入调试器(IIRC在Gerd试图做出的某点上它可以正常工作,但仍然存在一些严重的问题)。因此,您可以通过以下方式之一对其进行调试:

  • M-x jit-lock-debug-mode 它将jit-lock更改为在重新显示后立即运行,以便我们可以进入调试器。
  • M-: (setq font-lock-support-mode nil) RET然后禁用+重新启用字体锁定。这样,字体锁定不再使用jit-lock,因此它将在用户命令期间运行,而不是在随后的重新显示期间运行。

实际上,debug-on-error在进程标记上似乎工作正常。
Stefan 2014年

@tarsius-请发布指向您的
调试

tarsius的功能请求是19432,在那里被标记为不可复制。Stefan Monnier在此处发布了一种解决方法,该方法使用--eval而不是--debug-init 。同样,他的解决方法也无济于事,我在我的实际工作中陷入了.emacs.d
困境

1
@dcorking:不,在bug#19432中,我没有发布“替代方法”,但是尝试重现他的bug失败。您为什么不发送配方来重现您的问题?
Stefan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.