X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/de2436ef7b89c052dc78532eccaef1840f7dee0a..490468dcffd66ab9ea64bc1204ac9692dc530e8c:/src/.gdbinit diff --git a/src/.gdbinit b/src/.gdbinit index e9bb716a09..ef7100f892 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -1,11 +1,41 @@ -# Set up a mask to use. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Emacs. +# +# GNU Emacs is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# GNU Emacs is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Emacs; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. # Force loading of symbols, enough to give us gdb_valbits etc. set main # Find lwlib source files too. dir ../lwlib +#dir /gd/gnu/lesstif-0.89.9/lib/Xm + +# Don't enter GDB when user types C-g to quit. +# This has one unfortunate effect: you can't type C-c +# at the GDB to stop Emacs, when using X. +# However, C-z works just as well in that case. +handle 2 noprint pass +# Don't pass SIGALRM to Emacs. This makes problems when +# debugging. +handle SIGALRM ignore + +# Set up a mask to use. # This should be EMACS_INT, but in some cases that is a macro. # long ought to work in all cases right now. set $valmask = ((long)1 << gdb_valbits) - 1 @@ -64,15 +94,6 @@ document xptr Print the pointer portion of $, assuming it is an Emacs Lisp value. end -define xwindow -print (struct window *) (($ & $valmask) | gdb_data_seg_bits) -printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top -end -document xwindow -Print $ as a window pointer, assuming it is an Emacs Lisp window value. -Print the window's position as "WIDTHxHEIGHT+LEFT+TOP". -end - define xmarker print (struct Lisp_Marker *) (($ & $valmask) | gdb_data_seg_bits) end @@ -136,19 +157,9 @@ document xbuflocal Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value. end -define xbuffer -print (struct buffer *) (($ & $valmask) | gdb_data_seg_bits) -output &((struct Lisp_String *) ((($->name) & $valmask) | gdb_data_seg_bits))->data -echo \n -end -document xbuffer -Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value. -Print the name of the buffer. -end - define xsymbol print (struct Lisp_Symbol *) ((((int) $) & $valmask) | gdb_data_seg_bits) -output (char*)&$->name->data +output (char*)$->name->data echo \n end document xsymbol @@ -158,7 +169,7 @@ end define xstring print (struct Lisp_String *) (($ & $valmask) | gdb_data_seg_bits) -output ($->size > 1000) ? 0 : ($->data[0])@($->size) +output ($->size > 1000) ? 0 : ($->data[0])@($->size_byte < 0 ? $->size : $->size_byte) echo \n end document xstring @@ -176,6 +187,15 @@ Print the contents and address of the vector $. This command assumes that $ is an Emacs Lisp vector value. end +define xprocess +print (struct Lisp_Process *) (($ & $valmask) | gdb_data_seg_bits) +output *$ +echo \n +end +document xprocess +Print the address of the struct Lisp_process which the Lisp_Object $ points to. +end + define xframe print (struct frame *) (($ & $valmask) | gdb_data_seg_bits) end @@ -183,6 +203,23 @@ document xframe Print $ as a frame pointer, assuming it is an Emacs Lisp frame value. end +define xcompiled +print (struct Lisp_Vector *) (($ & $valmask) | gdb_data_seg_bits) +output ($->contents[0])@($->size & 0xff) +end +document xcompiled +Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value. +end + +define xwindow +print (struct window *) (($ & $valmask) | gdb_data_seg_bits) +printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top +end +document xwindow +Print $ as a window pointer, assuming it is an Emacs Lisp window value. +Print the window's position as "WIDTHxHEIGHT+LEFT+TOP". +end + define xwinconfig print (struct save_window_data *) (($ & $valmask) | gdb_data_seg_bits) end @@ -190,12 +227,52 @@ document xwinconfig Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value. end -define xcompiled -print (struct Lisp_Vector *) (($ & $valmask) | gdb_data_seg_bits) -output ($->contents[0])@($->size & 0xff) +define xsubr +print (struct Lisp_Subr *) (($ & $valmask) | gdb_data_seg_bits) +output *$ +echo \n end -document xcompiled -Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value. +document xsubr +Print the address of the subr which the Lisp_Object $ points to. +end + +define xchartable +print (struct Lisp_Char_Table *) (($ & $valmask) | gdb_data_seg_bits) +printf "Purpose: " +output (char*)&((struct Lisp_Symbol *) ((((int) $->purpose) & $valmask) | gdb_data_seg_bits))->name->data +printf " %d extra slots", ($->size & 0x1ff) - 388 +echo \n +end +document xchartable +Print the address of the char-table $, and its purpose. +This command assumes that $ is an Emacs Lisp char-table value. +end + +define xboolvector +print (struct Lisp_Bool_Vector *) (($ & $valmask) | gdb_data_seg_bits) +output ($->size > 256) ? 0 : ($->data[0])@(($->size + 7)/ 8) +echo \n +end +document xboolvector +Print the contents and address of the bool-vector $. +This command assumes that $ is an Emacs Lisp bool-vector value. +end + +define xbuffer +print (struct buffer *) (($ & $valmask) | gdb_data_seg_bits) +output &((struct Lisp_String *) ((($->name) & $valmask) | gdb_data_seg_bits))->data +echo \n +end +document xbuffer +Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value. +Print the name of the buffer. +end + +define xhashtable +print (struct Lisp_Hash_Table *) (($ & $valmask) | gdb_data_seg_bits) +end +document xhashtable +Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value. end define xcons @@ -230,24 +307,6 @@ document xcdr Print the cdr of $, assuming it is an Emacs Lisp pair. end -define xsubr -print (struct Lisp_Subr *) (($ & $valmask) | gdb_data_seg_bits) -output *$ -echo \n -end -document xsubr -Print the address of the subr which the Lisp_Object $ points to. -end - -define xprocess -print (struct Lisp_Process *) (($ & $valmask) | gdb_data_seg_bits) -output *$ -echo \n -end -document xprocess -Print the address of the struct Lisp_process which the Lisp_Object $ points to. -end - define xfloat print ((struct Lisp_Float *) (($ & $valmask) | gdb_data_seg_bits))->data end @@ -264,6 +323,56 @@ document xscrollbar Print $ as a scrollbar pointer. end +define xprintsym + set $sym = (struct Lisp_Symbol *) ((((int) $arg0) & $valmask) | gdb_data_seg_bits) + output (char*)$sym->name->data + echo \n +end +document xprintsym + Print argument as a symbol. +end + +define xbacktrace + set $bt = backtrace_list + while $bt + set $type = (enum Lisp_Type) ((*$bt->function >> gdb_valbits) & 0x7) + if $type == Lisp_Symbol + xprintsym *$bt->function + else + printf "0x%x ", *$bt->function + if $type == Lisp_Vectorlike + set $size = ((struct Lisp_Vector *) ((*$bt->function & $valmask) | gdb_data_seg_bits))->size + output (enum pvec_type) (($size & PVEC_FLAG) ? $size & PVEC_TYPE_MASK : 0) + else + printf "Lisp type %d", $type + end + echo \n + end + set $bt = $bt->next + end +end +document xbacktrace + Print a backtrace of Lisp function calls from backtrace_list. + Set a breakpoint at Fsignal and call this to see from where + an error was signaled. +end + +define xreload + set $valmask = ((long)1 << gdb_valbits) - 1 + set $nonvalbits = gdb_emacs_intbits - gdb_valbits +end +document xreload + When starting Emacs a second time in the same gdb session under + FreeBSD 2.2.5, gdb 4.13, $valmask and $nonvalbits have lost + their values. (The same happens on current (2000) versions of GNU/Linux + with gdb 5.0.) + This function reloads them. +end + +define hook-run + xreload +end + set print pretty on set print sevenbit-strings