(add-log-current-defun): Handle class::method notation of c++.
[emacs.git] / src / .gdbinit
blobcb1deddb1ea5b1b8138bf9f1e8a746ddf81b3832
1 # Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 2000, 01, 2004
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 # Don't pass SIGALRM to Emacs.  This makes problems when
35 # debugging.
36 handle SIGALRM ignore
38 # $valmask and $tagmask are mask values set up by the xreload macro below.
40 # Use $bugfix so that the value isn't a constant.
41 # Using a constant runs into GDB bugs sometimes.
42 define xgetptr
43   set $bugfix = $arg0
44   set $ptr = (gdb_use_union ? $bugfix.u.val : $bugfix & $valmask) | gdb_data_seg_bits
45 end
47 define xgetint
48   set $bugfix = $arg0
49   set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
50 end
52 define xgettype
53   set $bugfix = $arg0
54   set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
55 end
57 # Set up something to print out s-expressions.
58 define pr
59   set debug_print ($)
60 end
61 document pr
62 Print the emacs s-expression which is $.
63 Works only when an inferior emacs is executing.
64 end
66 # Print out s-expressions
67 define pp
68   set $tmp = $arg0
69   set safe_debug_print ($tmp)
70 end
71 document pp
72 Print the argument as an emacs s-expression
73 Works only when an inferior emacs is executing.
74 end
76 # Print out s-expressions from tool bar
77 define pp1
78   set $tmp = $arg0
79   echo $arg0
80   printf " = "
81   set safe_debug_print ($tmp)
82 end
83 document pp1
84 Print the argument as an emacs s-expression
85 Works only when an inferior emacs is executing.
86 For use on tool bar when debugging in Emacs
87 where the variable name would not otherwise
88 be recorded in the GUD buffer.
89 end
91 # Print value of lisp variable
92 define pv
93   set $tmp = "$arg0"
94   set safe_debug_print ( find_symbol_value (intern ($tmp)))
95 end
96 document pv
97 Print the value of the lisp variable given as argument.
98 Works only when an inferior emacs is executing.
99 end
101 # Print value of lisp variable
102 define pv1
103   set $tmp = "$arg0"
104   echo $arg0
105   printf " = "
106   set safe_debug_print (find_symbol_value (intern ($tmp)))
108 document pv1
109 Print the value of the lisp variable given as argument.
110 Works only when an inferior emacs is executing.
111 For use on tool bar when debugging in Emacs
112 where the variable name would not otherwise
113 be recorded in the GUD buffer.
116 # Print out current buffer point and boundaries
117 define ppt
118   set $b = current_buffer
119   set $t = $b->text
120   printf "BUF PT: %d", $b->pt
121   if ($b->pt != $b->pt_byte)
122     printf "[%d]", $b->pt_byte
123   end
124   printf " of 1..%d", $t->z
125   if ($t->z != $t->z_byte)
126     printf "[%d]", $t->z_byte
127   end
128   if ($b->begv != 1 || $b->zv != $t->z)
129     printf " NARROW=%d..%d", $b->begv, $b->zv
130     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
131       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
132     end
133   end
134   printf " GAP: %d", $t->gpt
135   if ($t->gpt != $t->gpt_byte)
136     printf "[%d]", $t->gpt_byte
137   end
138   printf " SZ=%d\n", $t->gap_size
140 document ppt
141 Print point, beg, end, narrow, and gap for current buffer.
144 # Print out iterator given as first arg
145 define pitx
146   set $it = $arg0
147   printf "cur=%d", $it->current.pos.charpos
148   if ($it->current.pos.charpos != $it->current.pos.bytepos)
149     printf "[%d]", $it->current.pos.bytepos
150   end
151   printf " start=%d", $it->start.pos.charpos
152   if ($it->start.pos.charpos != $it->start.pos.bytepos)
153     printf "[%d]", $it->start.pos.bytepos
154   end
155   printf " end=%d", $it->end_charpos
156   printf " stop=%d", $it->stop_charpos
157   printf " face=%d", $it->face_id
158   if ($it->multibyte_p)
159     printf " MB"
160   end
161   if ($it->header_line_p)
162     printf " HL"
163   end
164   if ($it->n_overlay_strings > 0)
165     printf " nov=%d"
166   end
167   if ($it->sp != 0)
168     printf " sp=%d", $it->sp
169   end
170   if ($it->what == IT_CHARACTER)
171     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
172       printf " ch='%c'", $it->c
173     else
174       printf " ch=[%d,%d]", $it->c, $it->len
175     end
176   else
177     if ($it->what == IT_IMAGE)
178       printf " IMAGE=%d", $it->image_id
179     else
180       printf " "
181       output $it->what
182     end
183   end
184   if ($it->method != GET_FROM_BUFFER)
185     printf " next="
186     output $it->method
187     if ($it->method == GET_FROM_STRING)
188       printf "[%d]", $it->current.string_pos.charpos
189     end
190   end
191   printf "\n"
192   if ($it->region_beg_charpos >= 0)
193     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
194   end
195   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
196   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
197   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
198   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
199   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
200   printf "\n"
202 document pitx
203 Pretty print a display iterator.
204 Take one arg, an iterator object or pointer.
207 define pit
208   pitx it
210 document pit
211 Pretty print the display iterator it.
214 define prowx
215   set $row = $arg0
216   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
217   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
218   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
219   printf " vis=%d", $row->visible_height
220   printf "  L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
221   printf "\n"
222   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
223   if ($row->enabled_p)
224     printf " ENA"
225   end
226   if ($row->displays_text_p)
227     printf " DISP"
228   end
229   if ($row->mode_line_p)
230     printf " MODEL"
231   end
232   if ($row->continued_p)
233     printf " CONT"
234   end
235   if ($row-> truncated_on_left_p)
236     printf " TRUNC:L"
237   end
238   if ($row-> truncated_on_right_p)
239     printf " TRUNC:R"
240   end
241   if ($row->starts_in_middle_of_char_p)
242     printf " STARTMID"
243   end
244   if ($row->ends_in_middle_of_char_p)
245     printf " ENDMID"
246   end
247   if ($row->ends_in_newline_from_string_p)
248     printf " ENDNLFS"
249   end
250   if ($row->ends_at_zv_p)
251     printf " ENDZV"
252   end
253   if ($row->overlapped_p)
254     printf " OLAPD"
255   end
256   if ($row->overlapping_p)
257     printf " OLAPNG"
258   end
259   printf "\n"
261 document prowx
262 Pretty print information about glyph_row.
263 Takes one argument, a row object or pointer.
266 define prow
267   prowx row
269 document prow
270 Pretty print information about glyph_row in row.
274 define pcursorx
275   set $cp = $arg0
276   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
278 document pcursorx
279 Pretty print a window cursor
282 define pcursor
283   printf "output: "
284   pcursorx output_cursor
285   printf "\n"
287 document pcursor
288 Pretty print the output_cursor
291 define pwinx
292   set $w = $arg0
293   xgetint $w->sequence_number
294   if ($w->mini_p != Qnil)
295     printf "Mini "
296   end
297   printf "Window %d ", $int
298   xgetptr $w->buffer
299   set $tem = (struct buffer *) $ptr
300   xgetptr $tem->name
301   printf "%s", ((struct Lisp_String *) $ptr)->data
302   printf "\n"
303   xgetptr $w->start
304   set $tem = (struct Lisp_Marker *) $ptr
305   printf "start=%d end:", $tem->charpos
306   if ($w->window_end_valid != Qnil)
307     xgetint $w->window_end_pos
308     printf "pos=%d", $int
309     xgetint $w->window_end_vpos
310     printf " vpos=%d", $int
311   else
312     printf "invalid"
313   end
314   printf " vscroll=%d", $w->vscroll
315   if ($w->force_start != Qnil)
316     printf " FORCE_START"
317   end
318   if ($w->must_be_updated_p)
319     printf " MUST_UPD"
320   end
321   printf "\n"
322   printf "cursor: "
323   pcursorx $w->cursor
324   printf "  phys: "
325   pcursorx $w->phys_cursor
326   if ($w->phys_cursor_on_p)
327     printf " ON"
328   else
329     printf " OFF"
330   end
331   printf " blk="
332   if ($w->last_cursor_off_p != $w->cursor_off_p)
333     if ($w->last_cursor_off_p)
334       printf "ON->"
335     else
336       printf "OFF->"
337     end
338   end
339   if ($w->cursor_off_p)
340     printf "ON"
341   else
342     printf "OFF"
343   end
344   printf "\n"
346 document pwinx
347 Pretty print a window structure.
348 Takes one argument, a pointer to a window structure
351 define pwin
352   pwinx w
354 document pwin
355 Pretty print window structure w.
359 define xtype
360   xgettype $
361   output $type
362   echo \n
363   if $type == Lisp_Misc
364     xmisctype
365   else
366     if $type == Lisp_Vectorlike
367       xvectype
368     end
369   end
371 document xtype
372 Print the type of $, assuming it is an Emacs Lisp value.
373 If the first type printed is Lisp_Vector or Lisp_Misc,
374 a second line gives the more precise type.
377 define xvectype
378   xgetptr $
379   set $size = ((struct Lisp_Vector *) $ptr)->size
380   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
381   echo \n
383 document xvectype
384 Print the size or vector subtype of $, assuming it is a vector or pseudovector.
387 define xmisctype
388   xgetptr $
389   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
390   echo \n
392 document xmisctype
393 Print the specific type of $, assuming it is some misc type.
396 define xint
397   xgetint $
398   print $int
400 document xint
401 Print $, assuming it is an Emacs Lisp integer.  This gets the sign right.
404 define xptr
405   xgetptr $
406   print (void *) $ptr
408 document xptr
409 Print the pointer portion of $, assuming it is an Emacs Lisp value.
412 define xmarker
413   xgetptr $
414   print (struct Lisp_Marker *) $ptr
416 document xmarker
417 Print $ as a marker pointer, assuming it is an Emacs Lisp marker value.
420 define xoverlay
421   xgetptr $
422   print (struct Lisp_Overlay *) $ptr
424 document xoverlay
425 Print $ as a overlay pointer, assuming it is an Emacs Lisp overlay value.
428 define xmiscfree
429   xgetptr $
430   print (struct Lisp_Free *) $ptr
432 document xmiscfree
433 Print $ as a misc free-cell pointer, assuming it is an Emacs Lisp Misc value.
436 define xintfwd
437   xgetptr $
438   print (struct Lisp_Intfwd *) $ptr
440 document xintfwd
441 Print $ as an integer forwarding pointer, assuming it is an Emacs Lisp Misc value.
444 define xboolfwd
445   xgetptr $
446   print (struct Lisp_Boolfwd *) $ptr
448 document xboolfwd
449 Print $ as a boolean forwarding pointer, assuming it is an Emacs Lisp Misc value.
452 define xobjfwd
453   xgetptr $
454   print (struct Lisp_Objfwd *) $ptr
456 document xobjfwd
457 Print $ as an object forwarding pointer, assuming it is an Emacs Lisp Misc value.
460 define xbufobjfwd
461   xgetptr $
462   print (struct Lisp_Buffer_Objfwd *) $ptr
464 document xbufobjfwd
465 Print $ as a buffer-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
468 define xkbobjfwd
469   xgetptr $
470   print (struct Lisp_Kboard_Objfwd *) $ptr
472 document xkbobjfwd
473 Print $ as a kboard-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
476 define xbuflocal
477   xgetptr $
478   print (struct Lisp_Buffer_Local_Value *) $ptr
480 document xbuflocal
481 Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value.
484 define xsymbol
485   set $sym = $
486   xgetptr $sym
487   print (struct Lisp_Symbol *) $ptr
488   xprintsym $sym
489   echo \n
491 document xsymbol
492 Print the name and address of the symbol $.
493 This command assumes that $ is an Emacs Lisp symbol value.
496 define xstring
497   xgetptr $
498   print (struct Lisp_String *) $ptr
499   xprintstr $
500   echo \n
502 document xstring
503 Print the contents and address of the string $.
504 This command assumes that $ is an Emacs Lisp string value.
507 define xvector
508   xgetptr $
509   print (struct Lisp_Vector *) $ptr
510   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
511 echo \n
513 document xvector
514 Print the contents and address of the vector $.
515 This command assumes that $ is an Emacs Lisp vector value.
518 define xprocess
519   xgetptr $
520   print (struct Lisp_Process *) $ptr
521   output *$
522   echo \n
524 document xprocess
525 Print the address of the struct Lisp_process which the Lisp_Object $ points to.
528 define xframe
529   xgetptr $
530   print (struct frame *) $ptr
532 document xframe
533 Print $ as a frame pointer, assuming it is an Emacs Lisp frame value.
536 define xcompiled
537   xgetptr $
538   print (struct Lisp_Vector *) $ptr
539   output ($->contents[0])@($->size & 0xff)
541 document xcompiled
542 Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value.
545 define xwindow
546   xgetptr $
547   print (struct window *) $ptr
548   printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top
550 document xwindow
551 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
552 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
555 define xwinconfig
556   xgetptr $
557   print (struct save_window_data *) $ptr
559 document xwinconfig
560 Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value.
563 define xsubr
564   xgetptr $
565   print (struct Lisp_Subr *) $ptr
566   output *$
567   echo \n
569 document xsubr
570 Print the address of the subr which the Lisp_Object $ points to.
573 define xchartable
574   xgetptr $
575   print (struct Lisp_Char_Table *) $ptr
576   printf "Purpose: "
577   xprintsym $->purpose
578   printf "  %d extra slots", ($->size & 0x1ff) - 388
579   echo \n
581 document xchartable
582 Print the address of the char-table $, and its purpose.
583 This command assumes that $ is an Emacs Lisp char-table value.
586 define xboolvector
587   xgetptr $
588   print (struct Lisp_Bool_Vector *) $ptr
589   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
590   echo \n
592 document xboolvector
593 Print the contents and address of the bool-vector $.
594 This command assumes that $ is an Emacs Lisp bool-vector value.
597 define xbuffer
598   xgetptr $
599   print (struct buffer *) $ptr
600   xgetptr $->name
601   output ((struct Lisp_String *) $ptr)->data
602   echo \n
604 document xbuffer
605 Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value.
606 Print the name of the buffer.
609 define xhashtable
610   xgetptr $
611   print (struct Lisp_Hash_Table *) $ptr
613 document xhashtable
614 Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value.
617 define xcons
618   xgetptr $
619   print (struct Lisp_Cons *) $ptr
620   output/x *$
621   echo \n
623 document xcons
624 Print the contents of $, assuming it is an Emacs Lisp cons.
627 define nextcons
628   p $.cdr
629   xcons
631 document nextcons
632 Print the contents of the next cell in a list.
633 This assumes that the last thing you printed was a cons cell contents
634 (type struct Lisp_Cons) or a pointer to one.
636 define xcar
637   xgetptr $
638   xgettype $
639   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
641 document xcar
642 Print the car of $, assuming it is an Emacs Lisp pair.
645 define xcdr
646   xgetptr $
647   xgettype $
648   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->cdr : 0)
650 document xcdr
651 Print the cdr of $, assuming it is an Emacs Lisp pair.
654 define xfloat
655   xgetptr $
656   print ((struct Lisp_Float *) $ptr)->data
658 document xfloat
659 Print $ assuming it is a lisp floating-point number.
662 define xscrollbar
663   xgetptr $
664   print (struct scrollbar *) $ptr
665 output *$
666 echo \n
668 document xscrollbar
669 Print $ as a scrollbar pointer.
672 define xprintstr
673   set $data = $arg0->data
674   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
677 define xprintsym
678   xgetptr $arg0
679   set $sym = (struct Lisp_Symbol *) $ptr
680   xgetptr $sym->xname
681   set $sym_name = (struct Lisp_String *) $ptr
682   xprintstr $sym_name
684 document xprintsym
685   Print argument as a symbol.
688 define xbacktrace
689   set $bt = backtrace_list
690   while $bt
691     xgettype (*$bt->function)
692     if $type == Lisp_Symbol
693       xprintsym (*$bt->function)
694       echo \n
695     else
696       printf "0x%x ", *$bt->function
697       if $type == Lisp_Vectorlike
698         xgetptr (*$bt->function)
699         set $size = ((struct Lisp_Vector *) $ptr)->size
700         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
701       else
702         printf "Lisp type %d", $type
703       end
704       echo \n
705     end
706     set $bt = $bt->next
707   end
709 document xbacktrace
710   Print a backtrace of Lisp function calls from backtrace_list.
711   Set a breakpoint at Fsignal and call this to see from where
712   an error was signaled.
715 define xreload
716   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
717   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
719 document xreload
720   When starting Emacs a second time in the same gdb session under
721   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
722   their values.  (The same happens on current (2000) versions of GNU/Linux
723   with gdb 5.0.)
724   This function reloads them.
726 xreload
728 # Flush display (X only)
729 define ff
730   set x_flush (0)
732 document ff
733 Flush pending X window display updates to screen.
734 Works only when an inferior emacs is executing.
738 define hook-run
739   xreload
742 # Call xreload if a new Emacs executable is loaded.
743 define hookpost-run
744   xreload
747 set print pretty on
748 set print sevenbit-strings
750 show environment DISPLAY
751 show environment TERM
752 set args -geometry 80x40+0+0
754 # Don't let abort actually run, as it will make
755 # stdio stop working and therefore the `pr' command above as well.
756 break abort
758 # If we are running in synchronous mode, we want a chance to look around
759 # before Emacs exits.  Perhaps we should put the break somewhere else
760 # instead...
761 break x_error_quitter
763 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe