Add 2006 to Copyright years.
[emacs.git] / src / .gdbinit
blob99dcbae793681a3928695ee4c846849e9e3a6ca0
1 # Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 2000, 01, 2004, 2005, 2006
2 #   Free Software Foundation, Inc.
4 # This file is part of GNU Emacs.
6 # GNU Emacs is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2, or (at your option)
9 # any later version.
11 # GNU Emacs is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with GNU Emacs; see the file COPYING.  If not, write to the
18 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 # Boston, MA 02110-1301, USA.
21 # Force loading of symbols, enough to give us gdb_valbits etc.
22 set main
24 # Find lwlib source files too.
25 dir ../lwlib
26 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
28 # Don't enter GDB when user types C-g to quit.
29 # This has one unfortunate effect: you can't type C-c
30 # at the GDB to stop Emacs, when using X.
31 # However, C-z works just as well in that case.
32 handle 2 noprint pass
34 # Make it work like SIGINT normally does.
35 handle SIGTSTP nopass
37 # Don't pass SIGALRM to Emacs.  This makes problems when
38 # debugging.
39 handle SIGALRM ignore
41 # $valmask and $tagmask are mask values set up by the xreload macro below.
43 # Use $bugfix so that the value isn't a constant.
44 # Using a constant runs into GDB bugs sometimes.
45 define xgetptr
46   set $bugfix = $arg0
47   set $ptr = (gdb_use_union ? $bugfix.u.val : $bugfix & $valmask) | gdb_data_seg_bits
48 end
50 define xgetint
51   set $bugfix = $arg0
52   set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
53 end
55 define xgettype
56   set $bugfix = $arg0
57   set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
58 end
60 # Set up something to print out s-expressions.
61 define pr
62   set debug_print ($)
63 end
64 document pr
65 Print the emacs s-expression which is $.
66 Works only when an inferior emacs is executing.
67 end
69 # Print out s-expressions
70 define pp
71   set $tmp = $arg0
72   set safe_debug_print ($tmp)
73 end
74 document pp
75 Print the argument as an emacs s-expression
76 Works only when an inferior emacs is executing.
77 end
79 # Print out s-expressions from tool bar
80 define pp1
81   set $tmp = $arg0
82   echo $arg0
83   printf " = "
84   set safe_debug_print ($tmp)
85 end
86 document pp1
87 Print the argument as an emacs s-expression
88 Works only when an inferior emacs is executing.
89 For use on tool bar when debugging in Emacs
90 where the variable name would not otherwise
91 be recorded in the GUD buffer.
92 end
94 # Print value of lisp variable
95 define pv
96   set $tmp = "$arg0"
97   set safe_debug_print ( find_symbol_value (intern ($tmp)))
98 end
99 document pv
100 Print the value of the lisp variable given as argument.
101 Works only when an inferior emacs is executing.
104 # Print value of lisp variable
105 define pv1
106   set $tmp = "$arg0"
107   echo $arg0
108   printf " = "
109   set safe_debug_print (find_symbol_value (intern ($tmp)))
111 document pv1
112 Print the value of the lisp variable given as argument.
113 Works only when an inferior emacs is executing.
114 For use on tool bar when debugging in Emacs
115 where the variable name would not otherwise
116 be recorded in the GUD buffer.
119 # Print out current buffer point and boundaries
120 define ppt
121   set $b = current_buffer
122   set $t = $b->text
123   printf "BUF PT: %d", $b->pt
124   if ($b->pt != $b->pt_byte)
125     printf "[%d]", $b->pt_byte
126   end
127   printf " of 1..%d", $t->z
128   if ($t->z != $t->z_byte)
129     printf "[%d]", $t->z_byte
130   end
131   if ($b->begv != 1 || $b->zv != $t->z)
132     printf " NARROW=%d..%d", $b->begv, $b->zv
133     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
134       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
135     end
136   end
137   printf " GAP: %d", $t->gpt
138   if ($t->gpt != $t->gpt_byte)
139     printf "[%d]", $t->gpt_byte
140   end
141   printf " SZ=%d\n", $t->gap_size
143 document ppt
144 Print point, beg, end, narrow, and gap for current buffer.
147 # Print out iterator given as first arg
148 define pitx
149   set $it = $arg0
150   printf "cur=%d", $it->current.pos.charpos
151   if ($it->current.pos.charpos != $it->current.pos.bytepos)
152     printf "[%d]", $it->current.pos.bytepos
153   end
154   printf " start=%d", $it->start.pos.charpos
155   if ($it->start.pos.charpos != $it->start.pos.bytepos)
156     printf "[%d]", $it->start.pos.bytepos
157   end
158   printf " end=%d", $it->end_charpos
159   printf " stop=%d", $it->stop_charpos
160   printf " face=%d", $it->face_id
161   if ($it->multibyte_p)
162     printf " MB"
163   end
164   if ($it->header_line_p)
165     printf " HL"
166   end
167   if ($it->n_overlay_strings > 0)
168     printf " nov=%d", $it->n_overlay_strings
169   end
170   if ($it->sp != 0)
171     printf " sp=%d", $it->sp
172   end
173   if ($it->what == IT_CHARACTER)
174     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
175       printf " ch='%c'", $it->c
176     else
177       printf " ch=[%d,%d]", $it->c, $it->len
178     end
179   else
180     if ($it->what == IT_IMAGE)
181       printf " IMAGE=%d", $it->image_id
182     else
183       printf " "
184       output $it->what
185     end
186   end
187   if ($it->method != GET_FROM_BUFFER)
188     printf " next="
189     output $it->method
190     if ($it->method == GET_FROM_STRING)
191       printf "[%d]", $it->current.string_pos.charpos
192     end
193   end
194   printf "\n"
195   if ($it->region_beg_charpos >= 0)
196     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
197   end
198   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
199   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
200   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
201   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
202   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
203   printf "\n"
205 document pitx
206 Pretty print a display iterator.
207 Take one arg, an iterator object or pointer.
210 define pit
211   pitx it
213 document pit
214 Pretty print the display iterator it.
217 define prowx
218   set $row = $arg0
219   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
220   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
221   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
222   printf " vis=%d", $row->visible_height
223   printf "  L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
224   printf "\n"
225   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
226   if ($row->enabled_p)
227     printf " ENA"
228   end
229   if ($row->displays_text_p)
230     printf " DISP"
231   end
232   if ($row->mode_line_p)
233     printf " MODEL"
234   end
235   if ($row->continued_p)
236     printf " CONT"
237   end
238   if ($row-> truncated_on_left_p)
239     printf " TRUNC:L"
240   end
241   if ($row-> truncated_on_right_p)
242     printf " TRUNC:R"
243   end
244   if ($row->starts_in_middle_of_char_p)
245     printf " STARTMID"
246   end
247   if ($row->ends_in_middle_of_char_p)
248     printf " ENDMID"
249   end
250   if ($row->ends_in_newline_from_string_p)
251     printf " ENDNLFS"
252   end
253   if ($row->ends_at_zv_p)
254     printf " ENDZV"
255   end
256   if ($row->overlapped_p)
257     printf " OLAPD"
258   end
259   if ($row->overlapping_p)
260     printf " OLAPNG"
261   end
262   printf "\n"
264 document prowx
265 Pretty print information about glyph_row.
266 Takes one argument, a row object or pointer.
269 define prow
270   prowx row
272 document prow
273 Pretty print information about glyph_row in row.
277 define pcursorx
278   set $cp = $arg0
279   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
281 document pcursorx
282 Pretty print a window cursor
285 define pcursor
286   printf "output: "
287   pcursorx output_cursor
288   printf "\n"
290 document pcursor
291 Pretty print the output_cursor
294 define pwinx
295   set $w = $arg0
296   xgetint $w->sequence_number
297   if ($w->mini_p != Qnil)
298     printf "Mini "
299   end
300   printf "Window %d ", $int
301   xgetptr $w->buffer
302   set $tem = (struct buffer *) $ptr
303   xgetptr $tem->name
304   printf "%s", ((struct Lisp_String *) $ptr)->data
305   printf "\n"
306   xgetptr $w->start
307   set $tem = (struct Lisp_Marker *) $ptr
308   printf "start=%d end:", $tem->charpos
309   if ($w->window_end_valid != Qnil)
310     xgetint $w->window_end_pos
311     printf "pos=%d", $int
312     xgetint $w->window_end_vpos
313     printf " vpos=%d", $int
314   else
315     printf "invalid"
316   end
317   printf " vscroll=%d", $w->vscroll
318   if ($w->force_start != Qnil)
319     printf " FORCE_START"
320   end
321   if ($w->must_be_updated_p)
322     printf " MUST_UPD"
323   end
324   printf "\n"
325   printf "cursor: "
326   pcursorx $w->cursor
327   printf "  phys: "
328   pcursorx $w->phys_cursor
329   if ($w->phys_cursor_on_p)
330     printf " ON"
331   else
332     printf " OFF"
333   end
334   printf " blk="
335   if ($w->last_cursor_off_p != $w->cursor_off_p)
336     if ($w->last_cursor_off_p)
337       printf "ON->"
338     else
339       printf "OFF->"
340     end
341   end
342   if ($w->cursor_off_p)
343     printf "ON"
344   else
345     printf "OFF"
346   end
347   printf "\n"
349 document pwinx
350 Pretty print a window structure.
351 Takes one argument, a pointer to a window structure
354 define pwin
355   pwinx w
357 document pwin
358 Pretty print window structure w.
362 define xtype
363   xgettype $
364   output $type
365   echo \n
366   if $type == Lisp_Misc
367     xmisctype
368   else
369     if $type == Lisp_Vectorlike
370       xvectype
371     end
372   end
374 document xtype
375 Print the type of $, assuming it is an Emacs Lisp value.
376 If the first type printed is Lisp_Vector or Lisp_Misc,
377 a second line gives the more precise type.
380 define xvectype
381   xgetptr $
382   set $size = ((struct Lisp_Vector *) $ptr)->size
383   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
384   echo \n
386 document xvectype
387 Print the size or vector subtype of $, assuming it is a vector or pseudovector.
390 define xmisctype
391   xgetptr $
392   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
393   echo \n
395 document xmisctype
396 Print the specific type of $, assuming it is some misc type.
399 define xint
400   xgetint $
401   print $int
403 document xint
404 Print $, assuming it is an Emacs Lisp integer.  This gets the sign right.
407 define xptr
408   xgetptr $
409   print (void *) $ptr
411 document xptr
412 Print the pointer portion of $, assuming it is an Emacs Lisp value.
415 define xmarker
416   xgetptr $
417   print (struct Lisp_Marker *) $ptr
419 document xmarker
420 Print $ as a marker pointer, assuming it is an Emacs Lisp marker value.
423 define xoverlay
424   xgetptr $
425   print (struct Lisp_Overlay *) $ptr
427 document xoverlay
428 Print $ as a overlay pointer, assuming it is an Emacs Lisp overlay value.
431 define xmiscfree
432   xgetptr $
433   print (struct Lisp_Free *) $ptr
435 document xmiscfree
436 Print $ as a misc free-cell pointer, assuming it is an Emacs Lisp Misc value.
439 define xintfwd
440   xgetptr $
441   print (struct Lisp_Intfwd *) $ptr
443 document xintfwd
444 Print $ as an integer forwarding pointer, assuming it is an Emacs Lisp Misc value.
447 define xboolfwd
448   xgetptr $
449   print (struct Lisp_Boolfwd *) $ptr
451 document xboolfwd
452 Print $ as a boolean forwarding pointer, assuming it is an Emacs Lisp Misc value.
455 define xobjfwd
456   xgetptr $
457   print (struct Lisp_Objfwd *) $ptr
459 document xobjfwd
460 Print $ as an object forwarding pointer, assuming it is an Emacs Lisp Misc value.
463 define xbufobjfwd
464   xgetptr $
465   print (struct Lisp_Buffer_Objfwd *) $ptr
467 document xbufobjfwd
468 Print $ as a buffer-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
471 define xkbobjfwd
472   xgetptr $
473   print (struct Lisp_Kboard_Objfwd *) $ptr
475 document xkbobjfwd
476 Print $ as a kboard-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
479 define xbuflocal
480   xgetptr $
481   print (struct Lisp_Buffer_Local_Value *) $ptr
483 document xbuflocal
484 Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value.
487 define xsymbol
488   set $sym = $
489   xgetptr $sym
490   print (struct Lisp_Symbol *) $ptr
491   xprintsym $sym
492   echo \n
494 document xsymbol
495 Print the name and address of the symbol $.
496 This command assumes that $ is an Emacs Lisp symbol value.
499 define xstring
500   xgetptr $
501   print (struct Lisp_String *) $ptr
502   xprintstr $
503   echo \n
505 document xstring
506 Print the contents and address of the string $.
507 This command assumes that $ is an Emacs Lisp string value.
510 define xvector
511   xgetptr $
512   print (struct Lisp_Vector *) $ptr
513   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
514 echo \n
516 document xvector
517 Print the contents and address of the vector $.
518 This command assumes that $ is an Emacs Lisp vector value.
521 define xprocess
522   xgetptr $
523   print (struct Lisp_Process *) $ptr
524   output *$
525   echo \n
527 document xprocess
528 Print the address of the struct Lisp_process which the Lisp_Object $ points to.
531 define xframe
532   xgetptr $
533   print (struct frame *) $ptr
535 document xframe
536 Print $ as a frame pointer, assuming it is an Emacs Lisp frame value.
539 define xcompiled
540   xgetptr $
541   print (struct Lisp_Vector *) $ptr
542   output ($->contents[0])@($->size & 0xff)
544 document xcompiled
545 Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value.
548 define xwindow
549   xgetptr $
550   print (struct window *) $ptr
551   printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top
553 document xwindow
554 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
555 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
558 define xwinconfig
559   xgetptr $
560   print (struct save_window_data *) $ptr
562 document xwinconfig
563 Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value.
566 define xsubr
567   xgetptr $
568   print (struct Lisp_Subr *) $ptr
569   output *$
570   echo \n
572 document xsubr
573 Print the address of the subr which the Lisp_Object $ points to.
576 define xchartable
577   xgetptr $
578   print (struct Lisp_Char_Table *) $ptr
579   printf "Purpose: "
580   xprintsym $->purpose
581   printf "  %d extra slots", ($->size & 0x1ff) - 388
582   echo \n
584 document xchartable
585 Print the address of the char-table $, and its purpose.
586 This command assumes that $ is an Emacs Lisp char-table value.
589 define xboolvector
590   xgetptr $
591   print (struct Lisp_Bool_Vector *) $ptr
592   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
593   echo \n
595 document xboolvector
596 Print the contents and address of the bool-vector $.
597 This command assumes that $ is an Emacs Lisp bool-vector value.
600 define xbuffer
601   xgetptr $
602   print (struct buffer *) $ptr
603   xgetptr $->name
604   output ((struct Lisp_String *) $ptr)->data
605   echo \n
607 document xbuffer
608 Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value.
609 Print the name of the buffer.
612 define xhashtable
613   xgetptr $
614   print (struct Lisp_Hash_Table *) $ptr
616 document xhashtable
617 Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value.
620 define xcons
621   xgetptr $
622   print (struct Lisp_Cons *) $ptr
623   output/x *$
624   echo \n
626 document xcons
627 Print the contents of $, assuming it is an Emacs Lisp cons.
630 define nextcons
631   p $.u.cdr
632   xcons
634 document nextcons
635 Print the contents of the next cell in a list.
636 This assumes that the last thing you printed was a cons cell contents
637 (type struct Lisp_Cons) or a pointer to one.
639 define xcar
640   xgetptr $
641   xgettype $
642   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
644 document xcar
645 Print the car of $, assuming it is an Emacs Lisp pair.
648 define xcdr
649   xgetptr $
650   xgettype $
651   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
653 document xcdr
654 Print the cdr of $, assuming it is an Emacs Lisp pair.
657 define xfloat
658   xgetptr $
659   print ((struct Lisp_Float *) $ptr)->u.data
661 document xfloat
662 Print $ assuming it is a lisp floating-point number.
665 define xscrollbar
666   xgetptr $
667   print (struct scrollbar *) $ptr
668 output *$
669 echo \n
671 document xscrollbar
672 Print $ as a scrollbar pointer.
675 define xprintstr
676   set $data = $arg0->data
677   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
680 define xprintsym
681   xgetptr $arg0
682   set $sym = (struct Lisp_Symbol *) $ptr
683   xgetptr $sym->xname
684   set $sym_name = (struct Lisp_String *) $ptr
685   xprintstr $sym_name
687 document xprintsym
688   Print argument as a symbol.
691 define xbacktrace
692   set $bt = backtrace_list
693   while $bt
694     xgettype (*$bt->function)
695     if $type == Lisp_Symbol
696       xprintsym (*$bt->function)
697       echo \n
698     else
699       printf "0x%x ", *$bt->function
700       if $type == Lisp_Vectorlike
701         xgetptr (*$bt->function)
702         set $size = ((struct Lisp_Vector *) $ptr)->size
703         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
704       else
705         printf "Lisp type %d", $type
706       end
707       echo \n
708     end
709     set $bt = $bt->next
710   end
712 document xbacktrace
713   Print a backtrace of Lisp function calls from backtrace_list.
714   Set a breakpoint at Fsignal and call this to see from where
715   an error was signaled.
718 # Show Lisp backtrace after normal backtrace.
719 define hookpost-backtrace
720   set $bt = backtrace_list
721   if $bt
722     echo \n
723     echo Lisp Backtrace:\n
724     xbacktrace
725   end
728 define xreload
729   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
730   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
732 document xreload
733   When starting Emacs a second time in the same gdb session under
734   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
735   their values.  (The same happens on current (2000) versions of GNU/Linux
736   with gdb 5.0.)
737   This function reloads them.
739 xreload
741 # Flush display (X only)
742 define ff
743   set x_flush (0)
745 document ff
746 Flush pending X window display updates to screen.
747 Works only when an inferior emacs is executing.
751 define hook-run
752   xreload
755 # Call xreload if a new Emacs executable is loaded.
756 define hookpost-run
757   xreload
760 set print pretty on
761 set print sevenbit-strings
763 show environment DISPLAY
764 show environment TERM
765 set args -geometry 80x40+0+0
767 # People get bothered when they see messages about non-existent functions...
768 xgetptr Vsystem_type
769 set $tem = (struct Lisp_Symbol *) $ptr
770 xgetptr $tem->xname
771 set $tem = (struct Lisp_String *) $ptr
772 set $tem = (char *) $tem->data
774 # Don't let abort actually run, as it will make stdio stop working and
775 # therefore the `pr' command above as well.
776 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
777   # The windows-nt build replaces abort with its own function.
778   break w32_abort
779 else
780   break abort
783 # x_error_quitter is defined only on X.  But window-system is set up
784 # only at run time, during Emacs startup, so we need to defer setting
785 # the breakpoint.  init_sys_modes is the first function called on
786 # every platform after init_display, where window-system is set.
787 tbreak init_sys_modes
788 commands
789   silent
790   xgetptr Vwindow_system
791   set $tem = (struct Lisp_Symbol *) $ptr
792   xgetptr $tem->xname
793   set $tem = (struct Lisp_String *) $ptr
794   set $tem = (char *) $tem->data
795   # If we are running in synchronous mode, we want a chance to look
796   # around before Emacs exits.  Perhaps we should put the break
797   # somewhere else instead...
798   if $tem[0] == 'x' && $tem[1] == '\0'
799     break x_error_quitter
800   end
801   continue
803 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe