X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/ea5f3ad489b0b5398645caebfc2225d2eaf9a746..9899d01a0ccec166e04caa60657a44e614be50cd:/src/.gdbinit diff --git a/src/.gdbinit b/src/.gdbinit index 59d1b7a59f..de35709f26 100644 --- a/src/.gdbinit +++ b/src/.gdbinit @@ -1,11 +1,11 @@ -# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 2000, 01, 2004, 2005, 2006 -# Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007 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) +# the Free Software Foundation; either version 3, or (at your option) # any later version. # # GNU Emacs is distributed in the hope that it will be useful, @@ -34,6 +34,10 @@ handle 2 noprint pass # Make it work like SIGINT normally does. handle SIGTSTP nopass +# Pass on user signals +handle SIGUSR1 noprint pass +handle SIGUSR2 noprint pass + # Don't pass SIGALRM to Emacs. This makes problems when # debugging. handle SIGALRM ignore @@ -58,8 +62,14 @@ define xgettype end # Set up something to print out s-expressions. +# We save and restore print_output_debug_flag to prevent the w32 port +# from calling OutputDebugString, which causes GDB to display each +# character twice (yuk!). define pr + set $output_debug = print_output_debug_flag + set print_output_debug_flag = 0 set debug_print ($) + set print_output_debug_flag = $output_debug end document pr Print the emacs s-expression which is $. @@ -69,7 +79,10 @@ end # Print out s-expressions define pp set $tmp = $arg0 + set $output_debug = print_output_debug_flag + set print_output_debug_flag = 0 set safe_debug_print ($tmp) + set print_output_debug_flag = $output_debug end document pp Print the argument as an emacs s-expression @@ -79,12 +92,13 @@ end # Print out s-expressions from tool bar define pp1 set $tmp = $arg0 - echo $arg0 - printf " = " + set $output_debug = print_output_debug_flag + set print_output_debug_flag = 0 set safe_debug_print ($tmp) + set print_output_debug_flag = $output_debug end document pp1 -Print the argument as an emacs s-expression +Print the argument as an emacs s-expression. Works only when an inferior emacs is executing. For use on tool bar when debugging in Emacs where the variable name would not otherwise @@ -94,7 +108,10 @@ end # Print value of lisp variable define pv set $tmp = "$arg0" + set $output_debug = print_output_debug_flag + set print_output_debug_flag = 0 set safe_debug_print ( find_symbol_value (intern ($tmp))) + set print_output_debug_flag = $output_debug end document pv Print the value of the lisp variable given as argument. @@ -104,16 +121,16 @@ end # Print value of lisp variable define pv1 set $tmp = "$arg0" - echo $arg0 - printf " = " + set $output_debug = print_output_debug_flag + set print_output_debug_flag = 0 set safe_debug_print (find_symbol_value (intern ($tmp))) + set print_output_debug_flag = $output_debug end document pv1 Print the value of the lisp variable given as argument. Works only when an inferior emacs is executing. -For use on tool bar when debugging in Emacs -where the variable name would not otherwise -be recorded in the GUD buffer. +For use when debugging in Emacs where the variable +name would not otherwise be recorded in the GUD buffer. end # Print out current buffer point and boundaries @@ -141,7 +158,8 @@ define ppt printf " SZ=%d\n", $t->gap_size end document ppt -Print point, beg, end, narrow, and gap for current buffer. +Print current buffer's point and boundaries. +Prints values of point, beg, end, narrow, and gap for current buffer. end # Print out iterator given as first arg @@ -151,6 +169,10 @@ define pitx if ($it->current.pos.charpos != $it->current.pos.bytepos) printf "[%d]", $it->current.pos.bytepos end + printf " pos=%d", $it->position.charpos + if ($it->position.charpos != $it->position.bytepos) + printf "[%d]", $it->position.bytepos + end printf " start=%d", $it->start.pos.charpos if ($it->start.pos.charpos != $it->start.pos.bytepos) printf "[%d]", $it->start.pos.bytepos @@ -177,12 +199,8 @@ define pitx printf " ch=[%d,%d]", $it->c, $it->len end else - if ($it->what == IT_IMAGE) - printf " IMAGE=%d", $it->image_id - else - printf " " - output $it->what - end + printf " " + output $it->what end if ($it->method != GET_FROM_BUFFER) printf " next=" @@ -190,6 +208,12 @@ define pitx if ($it->method == GET_FROM_STRING) printf "[%d]", $it->current.string_pos.charpos end + if ($it->method == GET_FROM_IMAGE) + printf "[%d]", $it->image_id + end + if ($it->method == GET_FROM_COMPOSITION) + printf "[%d,%d,%d]", $it->cmp_id, $it->len, $it->cmp_len + end end printf "\n" if ($it->region_beg_charpos >= 0) @@ -198,9 +222,19 @@ define pitx printf "vpos=%d hpos=%d", $it->vpos, $it->hpos, printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x + printf " w=%d", $it->pixel_width printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent printf "\n" + set $i = 0 + while ($i < $it->sp && $i < 4) + set $e = $it->stack[$i] + printf "stack[%d]: ", $i + output $e->method + printf "[%d]", $e->position.charpos + printf "\n" + set $i = $i + 1 + end end document pitx Pretty print a display iterator. @@ -279,7 +313,7 @@ define pcursorx printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos end document pcursorx -Pretty print a window cursor +Pretty print a window cursor. end define pcursor @@ -288,7 +322,7 @@ define pcursor printf "\n" end document pcursor -Pretty print the output_cursor +Pretty print the output_cursor. end define pwinx @@ -348,7 +382,7 @@ define pwinx end document pwinx Pretty print a window structure. -Takes one argument, a pointer to a window structure +Takes one argument, a pointer to a window structure. end define pwin @@ -358,6 +392,121 @@ document pwin Pretty print window structure w. end +define pgx + set $g = $arg0 + if ($g->type == CHAR_GLYPH) + if ($g->u.ch >= ' ' && $g->u.ch < 127) + printf "CHAR[%c]", $g->u.ch + else + printf "CHAR[0x%x]", $g->u.ch + end + end + if ($g->type == COMPOSITE_GLYPH) + printf "COMP[%d]", $g->u.cmp_id + end + if ($g->type == IMAGE_GLYPH) + printf "IMAGE[%d]", $g->u.img_id + end + if ($g->type == STRETCH_GLYPH) + printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent + end + xgettype ($g->object) + if ($type == Lisp_String) + printf " str=%x[%d]", $g->object, $g->charpos + else + printf " pos=%d", $g->charpos + end + printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent + if ($g->face_id != DEFAULT_FACE_ID) + printf " face=%d", $g->face_id + end + if ($g->voffset) + printf " vof=%d", $g->voffset + end + if ($g->multibyte_p) + printf " MB" + end + if ($g->padding_p) + printf " PAD" + end + if ($g->glyph_not_available_p) + printf " N/A" + end + if ($g->overlaps_vertically_p) + printf " OVL" + end + if ($g->left_box_line_p) + printf " [" + end + if ($g->right_box_line_p) + printf " ]" + end + if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height) + printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height + end + printf "\n" +end +document pgx +Pretty print a glyph structure. +Takes one argument, a pointer to a glyph structure. +end + +define pg + set $pgidx = 0 + pgx glyph +end +document pg +Pretty print glyph structure glyph. +end + +define pgi + set $pgidx = $arg0 + pgx (&glyph[$pgidx]) +end +document pgi +Pretty print glyph structure glyph[I]. +Takes one argument, a integer I. +end + +define pgn + set $pgidx = $pgidx + 1 + pgx (&glyph[$pgidx]) +end +document pgn +Pretty print next glyph structure. +end + +define pgrowx + set $row = $arg0 + set $area = 0 + set $xofs = $row->x + while ($area < 3) + set $used = $row->used[$area] + if ($used > 0) + set $gl0 = $row->glyphs[$area] + set $pgidx = 0 + printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used + while ($pgidx < $used) + printf "%3d %4d: ", $pgidx, $xofs + pgx $gl0[$pgidx] + set $xofs = $xofs + $gl0[$pgidx]->pixel_width + set $pgidx = $pgidx + 1 + end + end + set $area = $area + 1 + end +end +document pgrowx +Pretty print all glyphs in a row structure. +Takes one argument, a pointer to a row structure. +end + +define pgrow + pgrowx row +end +document pgrow +Pretty print all glyphs in row structure row. +end define xtype xgettype $ @@ -384,7 +533,8 @@ define xvectype echo \n end document xvectype -Print the size or vector subtype of $, assuming it is a vector or pseudovector. +Print the size or vector subtype of $. +This command assumes that $ is a vector or pseudovector. end define xmisctype @@ -393,7 +543,7 @@ define xmisctype echo \n end document xmisctype -Print the specific type of $, assuming it is some misc type. +Assume that $ is some misc type and print its specific type. end define xint @@ -401,7 +551,7 @@ define xint print $int end document xint -Print $, assuming it is an Emacs Lisp integer. This gets the sign right. +Print $ as an Emacs Lisp integer. This gets the sign right. end define xptr @@ -409,7 +559,7 @@ define xptr print (void *) $ptr end document xptr -Print the pointer portion of $, assuming it is an Emacs Lisp value. +Print the pointer portion of an Emacs Lisp value in $. end define xmarker @@ -417,7 +567,8 @@ define xmarker print (struct Lisp_Marker *) $ptr end document xmarker -Print $ as a marker pointer, assuming it is an Emacs Lisp marker value. +Print $ as a marker pointer. +This command assumes that $ is an Emacs Lisp marker value. end define xoverlay @@ -425,7 +576,8 @@ define xoverlay print (struct Lisp_Overlay *) $ptr end document xoverlay -Print $ as a overlay pointer, assuming it is an Emacs Lisp overlay value. +Print $ as a overlay pointer. +This command assumes that $ is an Emacs Lisp overlay value. end define xmiscfree @@ -433,7 +585,8 @@ define xmiscfree print (struct Lisp_Free *) $ptr end document xmiscfree -Print $ as a misc free-cell pointer, assuming it is an Emacs Lisp Misc value. +Print $ as a misc free-cell pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xintfwd @@ -441,7 +594,8 @@ define xintfwd print (struct Lisp_Intfwd *) $ptr end document xintfwd -Print $ as an integer forwarding pointer, assuming it is an Emacs Lisp Misc value. +Print $ as an integer forwarding pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xboolfwd @@ -449,7 +603,8 @@ define xboolfwd print (struct Lisp_Boolfwd *) $ptr end document xboolfwd -Print $ as a boolean forwarding pointer, assuming it is an Emacs Lisp Misc value. +Print $ as a boolean forwarding pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xobjfwd @@ -457,7 +612,8 @@ define xobjfwd print (struct Lisp_Objfwd *) $ptr end document xobjfwd -Print $ as an object forwarding pointer, assuming it is an Emacs Lisp Misc value. +Print $ as an object forwarding pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xbufobjfwd @@ -465,7 +621,8 @@ define xbufobjfwd print (struct Lisp_Buffer_Objfwd *) $ptr end document xbufobjfwd -Print $ as a buffer-local object forwarding pointer, assuming it is an Emacs Lisp Misc value. +Print $ as a buffer-local object forwarding pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xkbobjfwd @@ -473,7 +630,8 @@ define xkbobjfwd print (struct Lisp_Kboard_Objfwd *) $ptr end document xkbobjfwd -Print $ as a kboard-local object forwarding pointer, assuming it is an Emacs Lisp Misc value. +Print $ as a kboard-local object forwarding pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xbuflocal @@ -481,7 +639,8 @@ define xbuflocal print (struct Lisp_Buffer_Local_Value *) $ptr end document xbuflocal -Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value. +Print $ as a buffer-local-value pointer. +This command assumes that $ is an Emacs Lisp Misc value. end define xsymbol @@ -525,15 +684,21 @@ define xprocess echo \n end document xprocess -Print the address of the struct Lisp_process which the Lisp_Object $ points to. +Print the address of the struct Lisp_process to which $ points. +This command assumes that $ is a Lisp_Object. end define xframe xgetptr $ print (struct frame *) $ptr + xgetptr $->name + set $ptr = (struct Lisp_String *) $ptr + xprintstr $ptr + echo \n end document xframe -Print $ as a frame pointer, assuming it is an Emacs Lisp frame value. +Print $ as a frame pointer. +This command assumes $ is an Emacs Lisp frame value. end define xcompiled @@ -542,13 +707,23 @@ define xcompiled output ($->contents[0])@($->size & 0xff) end document xcompiled -Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value. +Print $ as a compiled function pointer. +This command assumes that $ is an Emacs Lisp compiled value. end define xwindow xgetptr $ print (struct window *) $ptr - printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top + set $window = (struct window *) $ptr + xgetint $window->total_cols + set $width=$int + xgetint $window->total_lines + set $height=$int + xgetint $window->left_col + set $left=$int + xgetint $window->top_line + set $top=$int + 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. @@ -560,7 +735,8 @@ define xwinconfig print (struct save_window_data *) $ptr end document xwinconfig -Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value. +Print $ as a window configuration pointer. +This command assumes that $ is an Emacs Lisp window configuration value. end define xsubr @@ -605,8 +781,8 @@ define xbuffer echo \n end document xbuffer -Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value. -Print the name of the buffer. +Set $ as a buffer pointer and the name of the buffer. +This command assumes $ is an Emacs Lisp buffer value. end define xhashtable @@ -614,7 +790,8 @@ define xhashtable print (struct Lisp_Hash_Table *) $ptr end document xhashtable -Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value. +Set $ as a hash table pointer. +This command assumes that $ is an Emacs Lisp hash table value. end define xcons @@ -624,7 +801,7 @@ define xcons echo \n end document xcons -Print the contents of $, assuming it is an Emacs Lisp cons. +Print the contents of $ as an Emacs Lisp cons. end define nextcons @@ -633,7 +810,7 @@ define nextcons end document nextcons Print the contents of the next cell in a list. -This assumes that the last thing you printed was a cons cell contents +This command assumes that the last thing you printed was a cons cell contents (type struct Lisp_Cons) or a pointer to one. end define xcar @@ -642,7 +819,7 @@ define xcar print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0) end document xcar -Print the car of $, assuming it is an Emacs Lisp pair. +Assume that $ is an Emacs Lisp pair and print its car. end define xcdr @@ -651,7 +828,32 @@ define xcdr print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0) end document xcdr -Print the cdr of $, assuming it is an Emacs Lisp pair. +Assume that $ is an Emacs Lisp pair and print its cdr. +end + +define xlist + xgetptr $ + set $cons = (struct Lisp_Cons *) $ptr + xgetptr Qnil + set $nil = $ptr + set $i = 0 + while $cons != $nil && $i < 10 + p/x $cons->car + xpr + xgetptr $cons->u.cdr + set $cons = (struct Lisp_Cons *) $ptr + set $i = $i + 1 + printf "---\n" + end + if $cons == $nil + printf "nil\n" + else + printf "...\n" + p $ptr + end +end +document xlist +Print $ assuming it is a list. end define xfloat @@ -672,8 +874,110 @@ document xscrollbar Print $ as a scrollbar pointer. end +define xpr + xtype + if $type == Lisp_Int + xint + end + if $type == Lisp_Symbol + xsymbol + end + if $type == Lisp_String + xstring + end + if $type == Lisp_Cons + xcons + end + if $type == Lisp_Float + xfloat + end + if $type == Lisp_Misc + set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type) + if $misc == Lisp_Misc_Free + xmiscfree + end + if $misc == Lisp_Misc_Boolfwd + xboolfwd + end + if $misc == Lisp_Misc_Marker + xmarker + end + if $misc == Lisp_Misc_Intfwd + xintfwd + end + if $misc == Lisp_Misc_Boolfwd + xboolfwd + end + if $misc == Lisp_Misc_Objfwd + xobjfwd + end + if $misc == Lisp_Misc_Buffer_Objfwd + xbufobjfwd + end + if $misc == Lisp_Misc_Buffer_Local_Value + xbuflocal + end +# if $misc == Lisp_Misc_Some_Buffer_Local_Value +# xvalue +# end + if $misc == Lisp_Misc_Overlay + xoverlay + end + if $misc == Lisp_Misc_Kboard_Objfwd + xkbobjfwd + end +# if $misc == Lisp_Misc_Save_Value +# xsavevalue +# end + end + if $type == Lisp_Vectorlike + set $size = ((struct Lisp_Vector *) $ptr)->size + if ($size & PVEC_FLAG) + set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK) + if $vec == PVEC_NORMAL_VECTOR + xvector + end + if $vec == PVEC_PROCESS + xprocess + end + if $vec == PVEC_FRAME + xframe + end + if $vec == PVEC_COMPILED + xcompiled + end + if $vec == PVEC_WINDOW + xwindow + end + if $vec == PVEC_WINDOW_CONFIGURATION + xwinconfig + end + if $vec == PVEC_SUBR + xsubr + end + if $vec == PVEC_CHAR_TABLE + xchartable + end + if $vec == PVEC_BOOL_VECTOR + xboolvector + end + if $vec == PVEC_BUFFER + xbuffer + end + if $vec == PVEC_HASH_TABLE + xhashtable + end + else + xvector + end + end +end +document xpr +Print $ as a lisp object of any type. +end + define xprintstr - set $data = $arg0->data + set $data = (char *) $arg0->data output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte) end @@ -694,7 +998,7 @@ define xbacktrace xgettype (*$bt->function) if $type == Lisp_Symbol xprintsym (*$bt->function) - echo \n + printf " (0x%x)\n", *$bt->args else printf "0x%x ", *$bt->function if $type == Lisp_Vectorlike @@ -715,6 +1019,27 @@ document xbacktrace an error was signaled. end +define which + set debug_print (which_symbols ($arg0)) +end +document which + Print symbols which references a given lisp object + either as its symbol value or symbol function. +end + +define xbytecode + set $bt = byte_stack_list + while $bt + xgettype ($bt->byte_string) + printf "0x%x => ", $bt->byte_string + which $bt->byte_string + set $bt = $bt->next + end +end +document xbytecode + Print a backtrace of the byte code stack. +end + # Show Lisp backtrace after normal backtrace. define hookpost-backtrace set $bt = backtrace_list @@ -762,7 +1087,7 @@ set print sevenbit-strings show environment DISPLAY show environment TERM -set args -geometry 80x40+0+0 +#set args -geometry 80x40+0+0 # People get bothered when they see messages about non-existent functions... xgetptr Vsystem_type @@ -790,7 +1115,7 @@ end tbreak init_sys_modes commands silent - xgetptr Vwindow_system + xgetptr Vinitial_window_system set $tem = (struct Lisp_Symbol *) $ptr xgetptr $tem->xname set $tem = (struct Lisp_String *) $ptr