*** empty log message ***
[emacs.git] / src / .gdbinit
blobaeabe19100ef064704854eeb50395bfeb2d59a63
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 #   2004, 2005, 2006 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   set $window = (struct window *) $ptr
552   xgetint $window->total_cols
553   set $width=$int
554   xgetint $window->total_lines
555   set $height=$int
556   xgetint $window->left_col
557   set $left=$int
558   xgetint $window->top_line
559   set $top=$int
560   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
562 document xwindow
563 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
564 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
567 define xwinconfig
568   xgetptr $
569   print (struct save_window_data *) $ptr
571 document xwinconfig
572 Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value.
575 define xsubr
576   xgetptr $
577   print (struct Lisp_Subr *) $ptr
578   output *$
579   echo \n
581 document xsubr
582 Print the address of the subr which the Lisp_Object $ points to.
585 define xchartable
586   xgetptr $
587   print (struct Lisp_Char_Table *) $ptr
588   printf "Purpose: "
589   xprintsym $->purpose
590   printf "  %d extra slots", ($->size & 0x1ff) - 388
591   echo \n
593 document xchartable
594 Print the address of the char-table $, and its purpose.
595 This command assumes that $ is an Emacs Lisp char-table value.
598 define xboolvector
599   xgetptr $
600   print (struct Lisp_Bool_Vector *) $ptr
601   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
602   echo \n
604 document xboolvector
605 Print the contents and address of the bool-vector $.
606 This command assumes that $ is an Emacs Lisp bool-vector value.
609 define xbuffer
610   xgetptr $
611   print (struct buffer *) $ptr
612   xgetptr $->name
613   output ((struct Lisp_String *) $ptr)->data
614   echo \n
616 document xbuffer
617 Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value.
618 Print the name of the buffer.
621 define xhashtable
622   xgetptr $
623   print (struct Lisp_Hash_Table *) $ptr
625 document xhashtable
626 Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value.
629 define xcons
630   xgetptr $
631   print (struct Lisp_Cons *) $ptr
632   output/x *$
633   echo \n
635 document xcons
636 Print the contents of $, assuming it is an Emacs Lisp cons.
639 define nextcons
640   p $.u.cdr
641   xcons
643 document nextcons
644 Print the contents of the next cell in a list.
645 This assumes that the last thing you printed was a cons cell contents
646 (type struct Lisp_Cons) or a pointer to one.
648 define xcar
649   xgetptr $
650   xgettype $
651   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
653 document xcar
654 Print the car of $, assuming it is an Emacs Lisp pair.
657 define xcdr
658   xgetptr $
659   xgettype $
660   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
662 document xcdr
663 Print the cdr of $, assuming it is an Emacs Lisp pair.
666 define xfloat
667   xgetptr $
668   print ((struct Lisp_Float *) $ptr)->u.data
670 document xfloat
671 Print $ assuming it is a lisp floating-point number.
674 define xscrollbar
675   xgetptr $
676   print (struct scrollbar *) $ptr
677 output *$
678 echo \n
680 document xscrollbar
681 Print $ as a scrollbar pointer.
684 define xprintstr
685   set $data = $arg0->data
686   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
689 define xprintsym
690   xgetptr $arg0
691   set $sym = (struct Lisp_Symbol *) $ptr
692   xgetptr $sym->xname
693   set $sym_name = (struct Lisp_String *) $ptr
694   xprintstr $sym_name
696 document xprintsym
697   Print argument as a symbol.
700 define xbacktrace
701   set $bt = backtrace_list
702   while $bt
703     xgettype (*$bt->function)
704     if $type == Lisp_Symbol
705       xprintsym (*$bt->function)
706       echo \n
707     else
708       printf "0x%x ", *$bt->function
709       if $type == Lisp_Vectorlike
710         xgetptr (*$bt->function)
711         set $size = ((struct Lisp_Vector *) $ptr)->size
712         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
713       else
714         printf "Lisp type %d", $type
715       end
716       echo \n
717     end
718     set $bt = $bt->next
719   end
721 document xbacktrace
722   Print a backtrace of Lisp function calls from backtrace_list.
723   Set a breakpoint at Fsignal and call this to see from where
724   an error was signaled.
727 # Show Lisp backtrace after normal backtrace.
728 define hookpost-backtrace
729   set $bt = backtrace_list
730   if $bt
731     echo \n
732     echo Lisp Backtrace:\n
733     xbacktrace
734   end
737 define xreload
738   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
739   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
741 document xreload
742   When starting Emacs a second time in the same gdb session under
743   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
744   their values.  (The same happens on current (2000) versions of GNU/Linux
745   with gdb 5.0.)
746   This function reloads them.
748 xreload
750 # Flush display (X only)
751 define ff
752   set x_flush (0)
754 document ff
755 Flush pending X window display updates to screen.
756 Works only when an inferior emacs is executing.
760 define hook-run
761   xreload
764 # Call xreload if a new Emacs executable is loaded.
765 define hookpost-run
766   xreload
769 set print pretty on
770 set print sevenbit-strings
772 show environment DISPLAY
773 show environment TERM
774 set args -geometry 80x40+0+0
776 # People get bothered when they see messages about non-existent functions...
777 xgetptr Vsystem_type
778 # $ptr is NULL in temacs
779 if ($ptr != 0)
780   set $tem = (struct Lisp_Symbol *) $ptr
781   xgetptr $tem->xname
782   set $tem = (struct Lisp_String *) $ptr
783   set $tem = (char *) $tem->data
785   # Don't let abort actually run, as it will make stdio stop working and
786   # therefore the `pr' command above as well.
787   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
788     # The windows-nt build replaces abort with its own function.
789     break w32_abort
790   else
791     break abort
792   end
795 # x_error_quitter is defined only on X.  But window-system is set up
796 # only at run time, during Emacs startup, so we need to defer setting
797 # the breakpoint.  init_sys_modes is the first function called on
798 # every platform after init_display, where window-system is set.
799 tbreak init_sys_modes
800 commands
801   silent
802   xgetptr Vwindow_system
803   set $tem = (struct Lisp_Symbol *) $ptr
804   xgetptr $tem->xname
805   set $tem = (struct Lisp_String *) $ptr
806   set $tem = (char *) $tem->data
807   # If we are running in synchronous mode, we want a chance to look
808   # around before Emacs exits.  Perhaps we should put the break
809   # somewhere else instead...
810   if $tem[0] == 'x' && $tem[1] == '\0'
811     break x_error_quitter
812   end
813   continue
815 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe