我如何调试/监控 Emacs 以找出它为什么使用这么多内存?

我如何调试/监控 Emacs 以找出它为什么使用这么多内存?

我正在使用 GNU Emacs 23.1.50.1(x86_64-pc-linux-gnu,GTK+ 版本 2.18.0)并在 GNU 屏幕内启动我的 Emacs 会话。

自从我升级到 Ubuntu 10.04 及其版本后,emacs-snapshot我遇到了一些问题。有时 Emacs 会占用所有 RAM 以及相同数量的交换空间(2+2GB),还会占用所有 CPU 时间。当我向进程发送 SIGTERM 时,进程会停止占用 CPU 时间,但分配的大量内存仍然存在。Emacs 本身不接受任何键序列。因此,通常我向进程发送 SIGKILL,它就会死机。

现在我想找出错误(如果有的话)的位置并进行一些调试。我看不出这种行为有什么特殊的原因。有时它在 Emacs 刚刚启动后就开始了,有时我可以一整天工作而没有问题,有时它发生在两者之间。所以我正在寻找一种调试或监控过程的方法。

我试过了strace,但这会产生太多输出。编辑会话的 Strace 输出很容易填满我的整个硬盘。在 gdb 中运行 Emacs 也行不通,因为如果我没记错的话,Ubuntu 构建软件时没有调试符号。那么你对我如何找到(可能的)错误有什么建议吗?你会建议什么?

答案1

也许是包裹emacs-快照-dbg可能会感兴趣?

“此软件包包含对调试 Emacs 有用的调试符号。”

答案2

我偶然发现了这个问题的答案。问题不是 emacs,而是 GNOME 密钥环出现故障。当我启动没有密钥环守护进程的 Emacs 时,一切都正常。因此禁用它解决了我的问题。

答案3

目前,我正在尝试将消息缓冲区的所有内容保存到一个文件中,并希望找到一些有用的内容:

(with-current-buffer "*Messages*" (auto-save-mode t))

相关内容