Mercurial > hg > xemacs-beta
diff src/gdbinit @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | c5d627a313b1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gdbinit Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,409 @@ +# Some useful commands for debugging emacs with gdb 4.14.* or better. +# Install this as your .gdbinit file in your home directory. +# If you have an older version of gdb 4.x, consider using the +# file "gdbinit.pre-4.14" in the XEmacs src directory. +# If you're one of the few who has an XEmacs compiled with +# --use-union-type, you'll need to use the file "gdbinit.union". +# Currently that file is of the pre-4.14 variety, but it should +# be easy to update it to 4.14+, along the same lines as this file. +# +# See also question 2.1.15 of the XEmacs FAQ, titled +# "How to Debug an XEmacs problem with a debugger". + +set print union off +set print pretty off + +define temacs + run -batch -l loadup.el run-temacs -q +end + +echo \n>>> Use the `temacs' command to run temacs\n\n + +# if you use Purify, do this: +# set env PURIFYOPTIONS -pointer-mask=0x0fffffff + +################ Print using the Lisp printer + +define p1 + call debug_print ($arg0) + printf "\n" +end + +define lbt +# "&" to compensate for GDB struct-passing bug +# but I've removed the &'s because it doesn't work with my GDB, +# and not having them works fine. +call Fbacktrace (Qexternal_debugging_output, Qt) +end + +################ Print using GDB built-ins + +define xint +print ((int)($arg0 << 4))>>4 +end + +define xbitvec +print (struct Lisp_Bit_Vector *) ($arg0 & 0xFFFFFFF) +end + +define xbuffer +print (struct buffer *) ($arg0 & 0xFFFFFFF) +end + +define xbytecode +print (struct Lisp_Bytecode *) ($arg0 & 0xFFFFFFF) +end + +define xcharset +print (struct Lisp_Charset *) ($arg0 & 0xFFFFFFF) +end + +define xchartab +print (struct Lisp_Char_Table *) ($arg0 & 0xFFFFFFF) +end + +define xchartabentry +print (struct Lisp_Char_Table_Entry *) ($arg0 & 0xFFFFFFF) +end + +define xcodesys +print (struct Lisp_Coding_System *) ($arg0 & 0xFFFFFFF) +end + +define xcolorinst +print (struct Lisp_Color_Instance *) ($arg0 & 0xFFFFFFF) +end + +define xcons +print (struct Lisp_Cons *) ($arg0 & 0xFFFFFFF) +end + +define xdevice +print (struct device *) ($arg0 & 0xFFFFFFF) +end + +define xevent +print (struct Lisp_Event *) ($arg0 & 0xFFFFFFF) +end + +define xextent +print (struct extent *) ($arg0 & 0xFFFFFFF) +end + +define xextentaux +print (struct extent_auxiliary *) ($arg0 & 0xFFFFFFF) +end + +define xextentinfo +print (struct extent_info *) ($arg0 & 0xFFFFFFF) +end + +define xfloat +print (struct Lisp_Float *) ($arg0 & 0xFFFFFFF) +output (double) $arg0->data.d +echo \n +end + +define xfontinst +print (struct Lisp_Font_Instance *) ($arg0 & 0xFFFFFFF) +end + +define xframe +print (struct frame *) ($arg0 & 0xFFFFFFF) +end + +define xglyph +print (struct Lisp_Glyph *) ($arg0 & 0xFFFFFFF) +end + +define xhashtable +print (struct hashtable_struct *) ($arg0 & 0xFFFFFFF) +end + +define ximageinst +print (struct Lisp_Image_Instance *) ($arg0 & 0xFFFFFFF) +end + +define xkeymap +print (struct keymap *) ($arg0 & 0xFFFFFFF) +end + +define xlstream +print (struct lstream *) ($arg0 & 0xFFFFFFF) +end + +define xmarker +print (struct Lisp_Marker *) ($arg0 & 0xFFFFFFF) +end + +define xmenubardata +print (struct menubar_data *) ($arg0 & 0xFFFFFFF) +end + +define xopaque +print (struct Lisp_Opaque *) ($arg0 & 0xFFFFFFF) +end + +define xprocess +print (struct Lisp_Process *) ($arg0 & 0xFFFFFFF) +end + +define xrangetab +print (struct Lisp_Range_Table *) ($arg0 & 0xFFFFFFF) +end + +define xspec +print (struct Lisp_Specifier *) ($arg0 & 0xFFFFFFF) +end + +define xstring +print (struct Lisp_String *) ($arg0 & 0xFFFFFFF) +output (char *) $arg0->_data +echo \n +end + +define xsubr +print (struct Lisp_Subr *) ($arg0 & 0xFFFFFFF) +end + +define xsubwindow +print (struct Lisp_Subwindow *) ($arg0 & 0xFFFFFFF) +end + +define xsymbol +set $tem = (struct Lisp_Symbol *) ($arg0 & 0xFFFFFFF) +output $tem->name->_data +printf "\n" +print $tem +end + +define xtoolbarbutton +print (struct toolbar_button *) ($arg0 & 0xFFFFFFF) +end + +define xtoolbardata +print (struct toolbar_data *) ($arg0 & 0xFFFFFFF) +end + +define xtooltalkmess +print (struct Lisp_Tooltalk_Message *) ($arg0 & 0xFFFFFFF) +end + +define xtooltalkpatt +print (struct Lisp_Tooltalk_Pattern *) ($arg0 & 0xFFFFFFF) +end + +define xvector +print (struct Lisp_Vector *) ($arg0 & 0xFFFFFFF) +end + +define xwindow +print (struct window *) ($arg0 & 0xFFFFFFF) +end + +define xwindowconfig +print (struct window_config *) ($arg0 & 0xFFFFFFF) +end + +define xrecord + print ((struct lrecord_header *) ($arg0 & 0xFFFFFFF)) + output (((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation->name) + echo \n + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_symbol + xsymbol $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_extent + xextent $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_marker + xmarker $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_event + xevent $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_buffer + xbuffer $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_window + xwindow $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_frame + xframe $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_device + xdevice $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_console + xconsole $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_process + xprocess $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_subr + xsubr $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_compiled_function + xbytecode $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_window_configuration + xwindowconfig $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_float + xfloat $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_opaque + xopaque $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_glyph + xglyph $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_keymap + xkeymap $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_lstream + xlstream $arg0 + else + if ((struct lrecord_header *) ($arg0 & 0xFFFFFFF))->implementation == lrecord_bit_vector + xbitvec $arg0 + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end + end +end + +define frob + if (enum Lisp_Type) (($arg0 >> 28) & 7) == Lisp_Int + xint $arg0 + else + if (enum Lisp_Type) (($arg0 >> 28) & 7) == Lisp_String + xstring $arg0 + else + if (enum Lisp_Type) (($arg0 >> 28) & 7) == Lisp_Cons + xcons $arg0 + else + if (enum Lisp_Type) (($arg0 >> 28) & 7) == Lisp_Vector + xvector $arg0 + else + if (enum Lisp_Type) (($arg0 >> 28) & 7) == Lisp_Record + xrecord $arg0 + else + printf "Unknown type?\n" + end + end + end + end + end +end + +################ Miscellaneous + +define xtype +# this is really xgctype, as we mask off the mark bit +output (enum Lisp_Type) (($arg0 >> 28) & 7) +echo \n +end + +define xmarkbit +print ($arg0 >> 31) +end + +define nilp +print $arg0 == Qnil +end + +define xcar + frob ((struct Lisp_Cons *) ($arg0 & 0xFFFFFFF))->car +end + +define xcdr + frob ((struct Lisp_Cons *) ($arg0 & 0xFFFFFFF))->cdr +end + +set $vector_length_mask = ~(1<<31) + +define string-length + print ((struct Lisp_String *) ($arg0 & 0xFFFFFFF))->_size & $vector_length_mask +end + +define string-contents + print (char *) ((struct Lisp_String *) ($ & 0xFFFFFFF))->_data +end + +define vector-length + print ((struct Lisp_Vector *) ($ & 0xFFFFFFF))->size & $vector_length_mask +end + +define vector-contents +set $tem = (struct Lisp_Vector *) ($ & 0xFFFFFFF) +print *($tem->contents) @ ($tem->size & $vector_length_mask) +set $ = $tem->contents +end + +define symbol-name +set $tem = ((struct Lisp_Symbol *) ($ & 0xFFFFFFF))->name +# output *($tem->_data) @ ($tem->_size & $vector_length_mask) +output ($tem->_data) +echo \n +set $type = Lisp_String +echo \n +end + +define symbol-value +set $tem = ((struct Lisp_Symbol *) ($ & 0xFFFFFFF))->value +end + +define symbol-function +set $tem = ((struct Lisp_Symbol *) ($ & 0xFFFFFFF))->function +end + +define symbol-plist +set $tem = ((struct Lisp_Symbol *) ($ & 0xFFFFFFF))->plist +end + +define wtype +p $->core.widget_class->core_class.class_name +end + +define xtname +print XrmQuarkToString(((Object)($))->object.xrm_name) +end + +# +# GDB, with the losing command-line parser that it has, +# cannot handle nested blocks. +# +define breaks + +br Fsignal +# command +# bt 3 +# p sig +# xsymbol +# end + +br Fkill_emacs +# command +# bt 3 +# end + +br assertion_failed +# command +# bt 3 +# end + +end