51.6 When Emacs Crashes
Emacs is not supposed to crash, but if it does, it produces a crash report prior to exiting. The crash report is printed to the standard error stream. If Emacs was started from a graphical desktop on a GNU or Unix system, the standard error stream is commonly redirected to a file such as ~/.xsession-errors
, so you can look for the crash report there. On MS-Windows, the crash report is written to a file named emacs_backtrace.txt
in the current directory of the Emacs process, in addition to the standard error stream.
The format of the crash report depends on the platform. On some platforms, such as those using the GNU C Library, the crash report includes a backtrace describing the execution state prior to crashing, which can be used to help debug the crash. Here is an example for a GNU system:
Fatal error 11: Segmentation fault
Backtrace:
emacs[0x5094e4]
emacs[0x4ed3e6]
emacs[0x4ed504]
/lib64/libpthread.so.0[0x375220efe0]
/lib64/libpthread.so.0(read+0xe)[0x375220e08e]
emacs[0x509af6]
emacs[0x5acc26]
β¦
The number β11
β is the system signal number corresponding to the crashβin this case a segmentation fault. The hexadecimal numbers are program addresses, which can be associated with source code lines using a debugging tool. For example, the GDB command βlist *0x509af6
β prints the source-code lines corresponding to the βemacs[0x509af6]
β entry. If your system has the addr2line
utility, the following shell command outputs a backtrace with source-code line numbers:
sed -n 's/.*\[\(.*\)]$/\1/p' backtrace |
addr2line -C -f -i -p -e bindir/emacs-binary
Here, backtrace
is the name of a text file containing a copy of the backtrace, bindir
is the name of the directory that contains the Emacs executable, and emacs-binary
is the name of the Emacs executable file, normally emacs
on GNU and Unix systems and emacs.exe
on MS-Windows and MS-DOS. Omit the -p
option if your version of addr2line
is too old to have it.
Optionally, Emacs can generate a core dump when it crashes, on systems that support core files. A core dump is a file containing voluminous data about the state of the program prior to the crash, usually examined by loading it into a debugger such as GDB. On many platforms, core dumps are disabled by default, and you must explicitly enable them by running the shell command βulimit -c unlimited
β (e.g., in your shell startup script).