怎样 debug emacs segfault ?

emacs segfault 崩溃这种应该怎样 debug?

上游打包的还是自己编译的?是启动时直接 segfault 还是运行时出现的?

如果是运行是出现的,最常见可能是运行了非法的 byte code,也就是把不同版本产生的 elc 混用了。

如果直接不能启动,那么更像是编译工具链的问题,或者是可执行文件损坏了。

emacs 是从 ppa 下载安装的,25.3.2

能启动,是运行自己写的包的时候出现的,我的包(未发布)中用到了 org-dp。然后在 org-noter 中使用出错,org-noter 使用 indirect buffer,并且将一级标题设为只读,可能与这也有关系。

难道要上 gdb?

用不着 gdb,先定位 elisp 代码为主。光用 gdb 也很难看出什么来

直接退出了,没有traceback,没法看啊,而且 org-noter 和 org-dp 代码都不算简单

  1. 删除所有相关 elc,直接 load 源文件试试。确定不是字节码导致的。

  2. 换自己编译的 Emacs 测试。可能是链接的库不对。

可以肯定不是字节码的问题,我以前吃过字节码的亏,所以每次更新都非常小心。

没有出错信息,这样试无异于大海捞针啊

用 edug 做断点调试。通过调用展开一层层找下去,相当于手动 Backtrace

https://www.gnu.org/software/emacs/manual/html_node/elisp/Using-Edebug.html#Using-Edebug

edebug 运行正常,但是一旦不用 edebug 就 segfault。现在正在尝试重新安装 spacemacs,然后去掉个人配置。

刚才重新安装了 spacemacs ,问题真没了。看来得重新整理配置了,就是不知道哪里出了问题,个人配置太多太乱了