更好的调试崩溃的Emacs?


9

虽然从Finder启动Emacs(24.3.93.1)可以正常运行,但是如果启动了终端版本,则:

/Applications/Emacs.app/Contents/MacOS/Emacs -nw

Emacs崩溃:

Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw

看来问题是由init.el中的一行引起的,

(set-face-attribute 'default nil :font "Menlo-16")

如果将该行注释掉,则Emacs的终端版本也将正常启动。

为了查明崩溃原因,我花了几个小时(将init.el减少一半)。

我知道,无论如何,Emacs都将继承终端应用程序中指定的任何字体和字体大小(基本上,该行在cli中没有意义。)

  1. 一般来说,是否有更好的方法来调试崩溃的Emacs?也许使用某种cli调试器可以打印出更具描述性的消息?
  2. 为什么该行通过cli导致Emacs崩溃,但如果不是从Finder启动则不会崩溃?

它真的是从cli启动的吗?或启动导致问题的终端版本?尝试在set-face-attribute周围捕获一些错误?(条件情况错误(set-face-attribute ...)(错误(消息“
Whoops

3
提交错误报告。Emacs永远不会由于Lisp代码而崩溃。但这可能与您使用的特定版本有关,这是正式版本吗?
马拉巴巴2014年

@ nic-ferrier:我现在在init.el中只有一行,但(condition-case err (set-face-attribute 'default nil :font "Menlo-16") (error (message "Whoops!")))仍然有相同的崩溃和相同的错误消息。没有其他以省略号开头的消息。
gsl 2014年

@ malabarba:我已经尝试GNU Emacs 24.3.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2013-03-13 on bob.porkrind.orgemacsformacosx.com使用,并且Emacs不会崩溃。因此,它必须是更高版本中的错误。我将提交错误报告。
gsl 2014年

1
正如@Malabarba指出的:(立即)提交错误报告M-x report-emacs-bug。然后,Emacs开发人员将引导您完成如何帮助调试问题的步骤。
提请2014年

Answers:


6

为了帮助您下次跟踪

这以前发生在我身上。曾经发生过string-to-intEmacs崩溃的情况, 我也花了几个小时才弄清楚。
抱歉,我无法提供更好的答案,但是Emacs崩溃在C代码的深处发生,并且没有可用的内置工具来查找此类问题。

我想可以用调试它gdb,但是其有效性取决于您对的熟练程度gdb

您真正需要做的是

提交错误报告

纯粹的elisp代码(非字节编译)永远不会使Emacs崩溃。它可能导致挂起(由于某些无限循环),并且可能导致Emacs内存不足。但是,除此之外,任何崩溃都是错误

M-x report-emacs-bug

仅提供您所想出的最少工作的示例,以及对您的构建和系统的描述,就足以对开发人员有所帮助。


2
使用gdb是唯一的方法。我们可以在Emacs中添加一些内容,以将每个C调用包装在可以自动捕获但始终无用的东西中。Emacs不应该崩溃,如果确实如此,我们应该专门处理该错误,以使其不再存在。是的,如果它坏了,请提交一个错误。务必使用gdb找出错误的确切位置。
nic ferrier 2014年

4

作为使用gdb进行调试的参考,您将要使用构建树中的src / temacs。这是没有预先转储的elisp的Emacs,它使调试器感到困惑。

gdb --args src/temacs -nw

1
谢谢您的出色建议(也不太容易找到周围的事物)。谢谢。
gsl 2014年
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.