Answers:
在gdb
使用之前,如果您使用的是Unix-y操作系统,则可以尝试发送SIGUSR2
到Emacs进程,如DEBUG
其他答案中提到的文件中所述。
$ kill -SIGUSR2 <emacs_pid_goes_here>
这将使Emacs尝试脱离当前循环进入Lisp调试器。
或者使用这一衬板而无需手动键入emacs pid:
$ ps aux | grep -ie emacs | grep -v grep | awk '{print $2}' | xargs kill -SIGUSR2
或者,如果killall
可用:
$ killall -USR2 emacs
如果在点击时冻结消失C-g
,则可以使用内置调试器。M-x toggle-debug-on-quit
在发送消息之前进行键入,C-g
在冻结时单击,然后检查出现的*Backtrace*
缓冲区。
如果C-g
没有帮助,则冻结可能发生在C代码中,并且您需要使用外部调试器,例如gdb
。点击C-h C-d
查看该DEBUG
文件,该文件提供了有关如何执行此操作的一些提示。(您也可以在Emacs存储库Web界面中阅读DEBUG文件。) 此答案进一步介绍了如何gdb
与Emacs 一起使用。
C-g
几次:C-g C-g C-g
。
M-x debug-on-entry THE-COMMAND
,然后逐步使用调试器d
(有时c
跳过某些步骤)。使源代码在另一个框架中保持打开状态,以便您可以跟踪调试器的工作。报告您在这里看到的内容,或者如果您认为它表明是Emacs错误,请使用M-x report-emacs-bug
。