If SXEmacs does crash on you, one of the most productive things you can do to help get the bug fixed is to poke around a bit with the debugger. Here are some hints:
attach command or something similar.
assert_failed().
signal_1()—this is
declared static in eval.c.
x_error_handler(); that will tell you which call is causing them.
Lisp_Object. These are references to Lisp objects.
Printing them out with the debugger probably won't be too
useful—you'll likely just see a number. To decode them, do this:
call dp (OBJECT)
where OBJECT is whatever you want to decode (it can be a variable, a function call, etc.). This uses the Lisp printing routines to out a readable representation on the TTY from which the sxemacs process was invoked.
call db ()
dp and db has two disadvantages - they can only be
used with a running (including hung or zombie) sxemacs process, and they
do not display the internal C structure of a Lisp Object. Even if all
you've got is a core dump, all is not lost.
If you're using GDB, there are some macros in the file src/.gdbinit in the SXEmacs source distribution that should make it easier for you to decode Lisp objects. This file is automatically read by gdb if gdb is run in the directory where sxemacs was built, and contains these useful macros to inspect the state of sxemacs:
pobjxtypelbtldprun-temacsdump-temacscheck-sxemacscheck-temacsIf you are using Sun's dbx debugger, there is an equivalent file src/.dbxrc, which defines the same commands for dbx.