Remove nodes visited during Isearch from the Info history.
[emacs.git] / src / .gdbinit
blob5ecdaa4a572809d0cd6acd7b84e38366fbc42434
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 #   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 #   Free Software Foundation, Inc.
5 # This file is part of GNU Emacs.
7 # GNU Emacs is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3, or (at your option)
10 # any later version.
12 # GNU Emacs is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Emacs; see the file COPYING.  If not, write to the
19 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 # Boston, MA 02110-1301, USA.
22 # Force loading of symbols, enough to give us gdb_valbits etc.
23 set main
24 # With some compilers, we need this to give us struct Lisp_Symbol etc.:
25 set Fmake_symbol
27 # Find lwlib source files too.
28 dir ../lwlib
29 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
31 # Don't enter GDB when user types C-g to quit.
32 # This has one unfortunate effect: you can't type C-c
33 # at the GDB to stop Emacs, when using X.
34 # However, C-z works just as well in that case.
35 handle 2 noprint pass
37 # Make it work like SIGINT normally does.
38 handle SIGTSTP nopass
40 # Pass on user signals
41 handle SIGUSR1 noprint pass
42 handle SIGUSR2 noprint pass
44 # Don't pass SIGALRM to Emacs.  This makes problems when
45 # debugging.
46 handle SIGALRM ignore
48 # $valmask and $tagmask are mask values set up by the xreload macro below.
50 # Use $bugfix so that the value isn't a constant.
51 # Using a constant runs into GDB bugs sometimes.
52 define xgetptr
53   set $bugfix = $arg0
54   set $ptr = (gdb_use_union ? $bugfix.u.val : $bugfix & $valmask) | gdb_data_seg_bits
55 end
57 define xgetint
58   set $bugfix = $arg0
59   set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
60 end
62 define xgettype
63   set $bugfix = $arg0
64   set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
65 end
67 # Set up something to print out s-expressions.
68 # We save and restore print_output_debug_flag to prevent the w32 port
69 # from calling OutputDebugString, which causes GDB to display each
70 # character twice (yuk!).
71 define pr
72   set $output_debug = print_output_debug_flag
73   set print_output_debug_flag = 0
74   set debug_print ($)
75   set print_output_debug_flag = $output_debug
76 end
77 document pr
78 Print the emacs s-expression which is $.
79 Works only when an inferior emacs is executing.
80 end
82 # Print out s-expressions
83 define pp
84   set $tmp = $arg0
85   set $output_debug = print_output_debug_flag
86   set print_output_debug_flag = 0
87   set safe_debug_print ($tmp)
88   set print_output_debug_flag = $output_debug
89 end
90 document pp
91 Print the argument as an emacs s-expression
92 Works only when an inferior emacs is executing.
93 end
95 # Print out s-expressions from tool bar
96 define pp1
97   set $tmp = $arg0
98   set $output_debug = print_output_debug_flag
99   set print_output_debug_flag = 0
100   set safe_debug_print ($tmp)
101   set print_output_debug_flag = $output_debug
103 document pp1
104 Print the argument as an emacs s-expression.
105 Works only when an inferior emacs is executing.
106 For use on tool bar when debugging in Emacs
107 where the variable name would not otherwise
108 be recorded in the GUD buffer.
111 # Print value of lisp variable
112 define pv
113   set $tmp = "$arg0"
114   set $output_debug = print_output_debug_flag
115   set print_output_debug_flag = 0
116   set safe_debug_print ( find_symbol_value (intern ($tmp)))
117   set print_output_debug_flag = $output_debug
119 document pv
120 Print the value of the lisp variable given as argument.
121 Works only when an inferior emacs is executing.
124 # Print value of lisp variable
125 define pv1
126   set $tmp = "$arg0"
127   set $output_debug = print_output_debug_flag
128   set print_output_debug_flag = 0
129   set safe_debug_print (find_symbol_value (intern ($tmp)))
130   set print_output_debug_flag = $output_debug
132 document pv1
133 Print the value of the lisp variable given as argument.
134 Works only when an inferior emacs is executing.
135 For use when debugging in Emacs where the variable
136 name would not otherwise be recorded in the GUD buffer.
139 # Print out current buffer point and boundaries
140 define ppt
141   set $b = current_buffer
142   set $t = $b->text
143   printf "BUF PT: %d", $b->pt
144   if ($b->pt != $b->pt_byte)
145     printf "[%d]", $b->pt_byte
146   end
147   printf " of 1..%d", $t->z
148   if ($t->z != $t->z_byte)
149     printf "[%d]", $t->z_byte
150   end
151   if ($b->begv != 1 || $b->zv != $t->z)
152     printf " NARROW=%d..%d", $b->begv, $b->zv
153     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
154       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
155     end
156   end
157   printf " GAP: %d", $t->gpt
158   if ($t->gpt != $t->gpt_byte)
159     printf "[%d]", $t->gpt_byte
160   end
161   printf " SZ=%d\n", $t->gap_size
163 document ppt
164 Print current buffer's point and boundaries.
165 Prints values of point, beg, end, narrow, and gap for current buffer.
168 define pitmethod
169   set $itmethod = $arg0
170   # output $itmethod
171   if ($itmethod == 0)
172     printf "GET_FROM_BUFFER"
173   end
174   if ($itmethod == 1)
175     printf "GET_FROM_DISPLAY_VECTOR"
176   end
177   if ($itmethod == 2)
178     printf "GET_FROM_STRING"
179   end
180   if ($itmethod == 3)
181     printf "GET_FROM_C_STRING"
182   end
183   if ($itmethod == 4)
184     printf "GET_FROM_IMAGE"
185   end
186   if ($itmethod == 5)
187     printf "GET_FROM_STRETCH"
188   end
189   if ($itmethod < 0 || $itmethod > 5)
190     output $itmethod
191   end
193 document pitmethod
194 Pretty print it->method given as first arg
197 # Print out iterator given as first arg
198 define pitx
199   set $it = $arg0
200   printf "cur=%d", $it->current.pos.charpos
201   if ($it->current.pos.charpos != $it->current.pos.bytepos)
202     printf "[%d]", $it->current.pos.bytepos
203   end
204   printf " pos=%d", $it->position.charpos
205   if ($it->position.charpos != $it->position.bytepos)
206     printf "[%d]", $it->position.bytepos
207   end
208   printf " start=%d", $it->start.pos.charpos
209   if ($it->start.pos.charpos != $it->start.pos.bytepos)
210     printf "[%d]", $it->start.pos.bytepos
211   end
212   printf " end=%d", $it->end_charpos
213   printf " stop=%d", $it->stop_charpos
214   printf " face=%d", $it->face_id
215   if ($it->multibyte_p)
216     printf " MB"
217   end
218   if ($it->header_line_p)
219     printf " HL"
220   end
221   if ($it->n_overlay_strings > 0)
222     printf " nov=%d", $it->n_overlay_strings
223   end
224   if ($it->sp != 0)
225     printf " sp=%d", $it->sp
226   end
227   # IT_CHARACTER
228   if ($it->what == 0)
229     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
230       printf " ch='%c'", $it->c
231     else
232       printf " ch=[%d,%d]", $it->c, $it->len
233     end
234   else
235     printf " "
236     # output $it->what
237     if ($it->what == 0)
238       printf "IT_CHARACTER"
239     end
240     if ($it->what == 1)
241       printf "IT_COMPOSITION"
242     end
243     if ($it->what == 2)
244       printf "IT_IMAGE"
245     end
246     if ($it->what == 3)
247       printf "IT_STRETCH"
248     end
249     if ($it->what == 4)
250       printf "IT_EOB"
251     end
252     if ($it->what == 5)
253       printf "IT_TRUNCATION"
254     end
255     if ($it->what == 6)
256       printf "IT_CONTINUATION"
257     end
258     if ($it->what < 0 || $it->what > 6)
259       output $it->what
260     end
261   end
262   if ($it->method != 0)
263     # !GET_FROM_BUFFER
264     printf " next="
265     pitmethod $it->method
266     if ($it->method == 2)
267       # GET_FROM_STRING
268       printf "[%d]", $it->current.string_pos.charpos
269     end
270     if ($it->method == 4)
271       # GET_FROM_IMAGE
272       printf "[%d]", $it->image_id
273     end
274   end
275   printf "\n"
276   if ($it->bidi_p)
277     printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
278   end
279   if ($it->region_beg_charpos >= 0)
280     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
281   end
282   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
283   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
284   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
285   printf " w=%d", $it->pixel_width
286   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
287   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
288   printf "\n"
289   set $i = 0
290   while ($i < $it->sp && $i < 4)
291     set $e = $it->stack[$i]
292     printf "stack[%d]: ", $i
293     pitmethod $e->method
294     printf "[%d]", $e->position.charpos
295     printf "\n"
296     set $i = $i + 1
297   end
299 document pitx
300 Pretty print a display iterator.
301 Take one arg, an iterator object or pointer.
304 define pit
305   pitx it
307 document pit
308 Pretty print the display iterator it.
311 define prowx
312   set $row = $arg0
313   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
314   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
315   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
316   printf " vis=%d", $row->visible_height
317   printf "  L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
318   printf "\n"
319   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
320   if ($row->enabled_p)
321     printf " ENA"
322   end
323   if ($row->displays_text_p)
324     printf " DISP"
325   end
326   if ($row->mode_line_p)
327     printf " MODEL"
328   end
329   if ($row->continued_p)
330     printf " CONT"
331   end
332   if ($row-> truncated_on_left_p)
333     printf " TRUNC:L"
334   end
335   if ($row-> truncated_on_right_p)
336     printf " TRUNC:R"
337   end
338   if ($row->starts_in_middle_of_char_p)
339     printf " STARTMID"
340   end
341   if ($row->ends_in_middle_of_char_p)
342     printf " ENDMID"
343   end
344   if ($row->ends_in_newline_from_string_p)
345     printf " ENDNLFS"
346   end
347   if ($row->ends_at_zv_p)
348     printf " ENDZV"
349   end
350   if ($row->overlapped_p)
351     printf " OLAPD"
352   end
353   if ($row->overlapping_p)
354     printf " OLAPNG"
355   end
356   printf "\n"
358 document prowx
359 Pretty print information about glyph_row.
360 Takes one argument, a row object or pointer.
363 define prow
364   prowx row
366 document prow
367 Pretty print information about glyph_row in row.
371 define pcursorx
372   set $cp = $arg0
373   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
375 document pcursorx
376 Pretty print a window cursor.
379 define pcursor
380   printf "output: "
381   pcursorx output_cursor
382   printf "\n"
384 document pcursor
385 Pretty print the output_cursor.
388 define pwinx
389   set $w = $arg0
390   xgetint $w->sequence_number
391   if ($w->mini_p != Qnil)
392     printf "Mini "
393   end
394   printf "Window %d ", $int
395   xgetptr $w->buffer
396   set $tem = (struct buffer *) $ptr
397   xgetptr $tem->name
398   printf "%s", ((struct Lisp_String *) $ptr)->data
399   printf "\n"
400   xgetptr $w->start
401   set $tem = (struct Lisp_Marker *) $ptr
402   printf "start=%d end:", $tem->charpos
403   if ($w->window_end_valid != Qnil)
404     xgetint $w->window_end_pos
405     printf "pos=%d", $int
406     xgetint $w->window_end_vpos
407     printf " vpos=%d", $int
408   else
409     printf "invalid"
410   end
411   printf " vscroll=%d", $w->vscroll
412   if ($w->force_start != Qnil)
413     printf " FORCE_START"
414   end
415   if ($w->must_be_updated_p)
416     printf " MUST_UPD"
417   end
418   printf "\n"
419   printf "cursor: "
420   pcursorx $w->cursor
421   printf "  phys: "
422   pcursorx $w->phys_cursor
423   if ($w->phys_cursor_on_p)
424     printf " ON"
425   else
426     printf " OFF"
427   end
428   printf " blk="
429   if ($w->last_cursor_off_p != $w->cursor_off_p)
430     if ($w->last_cursor_off_p)
431       printf "ON->"
432     else
433       printf "OFF->"
434     end
435   end
436   if ($w->cursor_off_p)
437     printf "ON"
438   else
439     printf "OFF"
440   end
441   printf "\n"
443 document pwinx
444 Pretty print a window structure.
445 Takes one argument, a pointer to a window structure.
448 define pwin
449   pwinx w
451 document pwin
452 Pretty print window structure w.
455 define pbiditype
456   if ($arg0 == 0)
457     printf "UNDEF"
458   end
459   if ($arg0 == 1)
460     printf "L"
461   end
462   if ($arg0 == 2)
463     printf "R"
464   end
465   if ($arg0 == 3)
466     printf "EN"
467   end
468   if ($arg0 == 4)
469     printf "AN"
470   end
471   if ($arg0 == 5)
472     printf "BN"
473   end
474   if ($arg0 == 6)
475     printf "B"
476   end
477   if ($arg0 < 0 || $arg0 > 6)
478     printf "%d??", $arg0
479   end
481 document pbiditype
482 Print textual description of bidi type given as first argument.
485 define pgx
486   set $g = $arg0
487   # CHAR_GLYPH
488   if ($g->type == 0)
489     if ($g->u.ch >= ' ' && $g->u.ch < 127)
490       printf "CHAR[%c]", $g->u.ch
491     else
492       printf "CHAR[0x%x]", $g->u.ch
493     end
494   end
495   # COMPOSITE_GLYPH
496   if ($g->type == 1)
497     printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->u.cmp.from, $g->u.cmp.to
498   end
499   # IMAGE_GLYPH
500   if ($g->type == 2)
501     printf "IMAGE[%d]", $g->u.img_id
502   end
503   # STRETCH_GLYPH
504   if ($g->type == 3)
505     printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
506   end
507   xgettype ($g->object)
508   if ($type == Lisp_String)
509     printf " str=%x[%d]", $g->object, $g->charpos
510   else
511     printf " pos=%d", $g->charpos
512   end
513   # For characters, print their resolved level and bidi type
514   if ($g->type == 0)
515     printf " blev=%d,btyp=", $g->resolved_level
516     pbiditype $g->bidi_type
517   end
518   printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
519   # If not DEFAULT_FACE_ID
520   if ($g->face_id != 0)
521     printf " face=%d", $g->face_id
522   end
523   if ($g->voffset)
524     printf " vof=%d", $g->voffset
525   end
526   if ($g->multibyte_p)
527     printf " MB"
528   end
529   if ($g->padding_p)
530     printf " PAD"
531   end
532   if ($g->glyph_not_available_p)
533     printf " N/A"
534   end
535   if ($g->overlaps_vertically_p)
536     printf " OVL"
537   end
538   if ($g->left_box_line_p)
539     printf " ["
540   end
541   if ($g->right_box_line_p)
542     printf " ]"
543   end
544   if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height)
545     printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height
546   end
547   printf "\n"
549 document pgx
550 Pretty print a glyph structure.
551 Takes one argument, a pointer to a glyph structure.
554 define pg
555   set $pgidx = 0
556   pgx glyph
558 document pg
559 Pretty print glyph structure glyph.
562 define pgi
563   set $pgidx = $arg0
564   pgx (&glyph[$pgidx])
566 document pgi
567 Pretty print glyph structure glyph[I].
568 Takes one argument, a integer I.
571 define pgn
572   set $pgidx = $pgidx + 1
573   pgx (&glyph[$pgidx])
575 document pgn
576 Pretty print next glyph structure.
579 define pgrowx
580   set $row = $arg0
581   set $area = 0
582   set $xofs = $row->x
583   while ($area < 3)
584     set $used = $row->used[$area]
585     if ($used > 0)
586       set $gl0 = $row->glyphs[$area]
587       set $pgidx = 0
588       printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
589       while ($pgidx < $used)
590         printf "%3d %4d: ", $pgidx, $xofs
591         pgx $gl0[$pgidx]
592         set $xofs = $xofs + $gl0[$pgidx]->pixel_width
593         set $pgidx = $pgidx + 1
594       end
595     end
596     set $area = $area + 1
597   end
599 document pgrowx
600 Pretty print all glyphs in a row structure.
601 Takes one argument, a pointer to a row structure.
604 define pgrow
605   pgrowx row
607 document pgrow
608 Pretty print all glyphs in row structure row.
611 define pgrowit
612   pgrowx it->glyph_row
614 document pgrowit
615 Pretty print all glyphs in it->glyph_row.
618 define prowlims
619   printf "start=%d,end=%d,reversed=%d,cont=%d,at_zv=%d\n", $arg0->start.pos.charpos, $arg0->end.pos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->ends_at_zv_p
621 document prowlims
622 Print important attributes of a glyph_row structure.
623 Takes one argument, a pointer to a glyph_row structure.
626 define pmtxrows
627   set $mtx = $arg0
628   set $gl = $mtx->rows
629   set $glend = $mtx->rows + $mtx->nrows
630   while ($gl < $glend)
631     prowlims $gl
632     set $gl = $gl + 1
633   end
635 document pmtxrows
636 Print data about glyph rows in a glyph matrix.
637 Takes one argument, a pointer to a glyph_matrix structure.
640 define xtype
641   xgettype $
642   output $type
643   echo \n
644   if $type == Lisp_Misc
645     xmisctype
646   else
647     if $type == Lisp_Vectorlike
648       xvectype
649     end
650   end
652 document xtype
653 Print the type of $, assuming it is an Emacs Lisp value.
654 If the first type printed is Lisp_Vector or Lisp_Misc,
655 a second line gives the more precise type.
658 define xvectype
659   xgetptr $
660   set $size = ((struct Lisp_Vector *) $ptr)->size
661   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
662   echo \n
664 document xvectype
665 Print the size or vector subtype of $.
666 This command assumes that $ is a vector or pseudovector.
669 define xmisctype
670   xgetptr $
671   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
672   echo \n
674 document xmisctype
675 Assume that $ is some misc type and print its specific type.
678 define xint
679   xgetint $
680   print $int
682 document xint
683 Print $ as an Emacs Lisp integer.  This gets the sign right.
686 define xptr
687   xgetptr $
688   print (void *) $ptr
690 document xptr
691 Print the pointer portion of an Emacs Lisp value in $.
694 define xmarker
695   xgetptr $
696   print (struct Lisp_Marker *) $ptr
698 document xmarker
699 Print $ as a marker pointer.
700 This command assumes that $ is an Emacs Lisp marker value.
703 define xoverlay
704   xgetptr $
705   print (struct Lisp_Overlay *) $ptr
707 document xoverlay
708 Print $ as a overlay pointer.
709 This command assumes that $ is an Emacs Lisp overlay value.
712 define xmiscfree
713   xgetptr $
714   print (struct Lisp_Free *) $ptr
716 document xmiscfree
717 Print $ as a misc free-cell pointer.
718 This command assumes that $ is an Emacs Lisp Misc value.
721 define xintfwd
722   xgetptr $
723   print (struct Lisp_Intfwd *) $ptr
725 document xintfwd
726 Print $ as an integer forwarding pointer.
727 This command assumes that $ is an Emacs Lisp Misc value.
730 define xboolfwd
731   xgetptr $
732   print (struct Lisp_Boolfwd *) $ptr
734 document xboolfwd
735 Print $ as a boolean forwarding pointer.
736 This command assumes that $ is an Emacs Lisp Misc value.
739 define xobjfwd
740   xgetptr $
741   print (struct Lisp_Objfwd *) $ptr
743 document xobjfwd
744 Print $ as an object forwarding pointer.
745 This command assumes that $ is an Emacs Lisp Misc value.
748 define xbufobjfwd
749   xgetptr $
750   print (struct Lisp_Buffer_Objfwd *) $ptr
752 document xbufobjfwd
753 Print $ as a buffer-local object forwarding pointer.
754 This command assumes that $ is an Emacs Lisp Misc value.
757 define xkbobjfwd
758   xgetptr $
759   print (struct Lisp_Kboard_Objfwd *) $ptr
761 document xkbobjfwd
762 Print $ as a kboard-local object forwarding pointer.
763 This command assumes that $ is an Emacs Lisp Misc value.
766 define xbuflocal
767   xgetptr $
768   print (struct Lisp_Buffer_Local_Value *) $ptr
770 document xbuflocal
771 Print $ as a buffer-local-value pointer.
772 This command assumes that $ is an Emacs Lisp Misc value.
775 define xsymbol
776   set $sym = $
777   xgetptr $sym
778   print (struct Lisp_Symbol *) $ptr
779   xprintsym $sym
780   echo \n
782 document xsymbol
783 Print the name and address of the symbol $.
784 This command assumes that $ is an Emacs Lisp symbol value.
787 define xstring
788   xgetptr $
789   print (struct Lisp_String *) $ptr
790   xprintstr $
791   echo \n
793 document xstring
794 Print the contents and address of the string $.
795 This command assumes that $ is an Emacs Lisp string value.
798 define xvector
799   xgetptr $
800   print (struct Lisp_Vector *) $ptr
801   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
802 echo \n
804 document xvector
805 Print the contents and address of the vector $.
806 This command assumes that $ is an Emacs Lisp vector value.
809 define xprocess
810   xgetptr $
811   print (struct Lisp_Process *) $ptr
812   output *$
813   echo \n
815 document xprocess
816 Print the address of the struct Lisp_process to which $ points.
817 This command assumes that $ is a Lisp_Object.
820 define xframe
821   xgetptr $
822   print (struct frame *) $ptr
823   xgetptr $->name
824   set $ptr = (struct Lisp_String *) $ptr
825   xprintstr $ptr
826   echo \n
828 document xframe
829 Print $ as a frame pointer.
830 This command assumes $ is an Emacs Lisp frame value.
833 define xcompiled
834   xgetptr $
835   print (struct Lisp_Vector *) $ptr
836   output ($->contents[0])@($->size & 0xff)
838 document xcompiled
839 Print $ as a compiled function pointer.
840 This command assumes that $ is an Emacs Lisp compiled value.
843 define xwindow
844   xgetptr $
845   print (struct window *) $ptr
846   set $window = (struct window *) $ptr
847   xgetint $window->total_cols
848   set $width=$int
849   xgetint $window->total_lines
850   set $height=$int
851   xgetint $window->left_col
852   set $left=$int
853   xgetint $window->top_line
854   set $top=$int
855   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
857 document xwindow
858 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
859 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
862 define xwinconfig
863   xgetptr $
864   print (struct save_window_data *) $ptr
866 document xwinconfig
867 Print $ as a window configuration pointer.
868 This command assumes that $ is an Emacs Lisp window configuration value.
871 define xsubr
872   xgetptr $
873   print (struct Lisp_Subr *) $ptr
874   output *$
875   echo \n
877 document xsubr
878 Print the address of the subr which the Lisp_Object $ points to.
881 define xchartable
882   xgetptr $
883   print (struct Lisp_Char_Table *) $ptr
884   printf "Purpose: "
885   xprintsym $->purpose
886   printf "  %d extra slots", ($->size & 0x1ff) - 68
887   echo \n
889 document xchartable
890 Print the address of the char-table $, and its purpose.
891 This command assumes that $ is an Emacs Lisp char-table value.
894 define xsubchartable
895   xgetptr $
896   print (struct Lisp_Sub_Char_Table *) $ptr
897   xgetint $->depth
898   set $depth = $int
899   xgetint $->min_char
900   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
902 document xsubchartable
903 Print the address of the sub-char-table $, its depth and min-char.
904 This command assumes that $ is an Emacs Lisp sub-char-table value.
907 define xboolvector
908   xgetptr $
909   print (struct Lisp_Bool_Vector *) $ptr
910   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
911   echo \n
913 document xboolvector
914 Print the contents and address of the bool-vector $.
915 This command assumes that $ is an Emacs Lisp bool-vector value.
918 define xbuffer
919   xgetptr $
920   print (struct buffer *) $ptr
921   xgetptr $->name
922   output ((struct Lisp_String *) $ptr)->data
923   echo \n
925 document xbuffer
926 Set $ as a buffer pointer and the name of the buffer.
927 This command assumes $ is an Emacs Lisp buffer value.
930 define xhashtable
931   xgetptr $
932   print (struct Lisp_Hash_Table *) $ptr
934 document xhashtable
935 Set $ as a hash table pointer.
936 This command assumes that $ is an Emacs Lisp hash table value.
939 define xcons
940   xgetptr $
941   print (struct Lisp_Cons *) $ptr
942   output/x *$
943   echo \n
945 document xcons
946 Print the contents of $ as an Emacs Lisp cons.
949 define nextcons
950   p $.u.cdr
951   xcons
953 document nextcons
954 Print the contents of the next cell in a list.
955 This command assumes that the last thing you printed was a cons cell contents
956 (type struct Lisp_Cons) or a pointer to one.
958 define xcar
959   xgetptr $
960   xgettype $
961   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
963 document xcar
964 Assume that $ is an Emacs Lisp pair and print its car.
967 define xcdr
968   xgetptr $
969   xgettype $
970   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
972 document xcdr
973 Assume that $ is an Emacs Lisp pair and print its cdr.
976 define xlist
977   xgetptr $
978   set $cons = (struct Lisp_Cons *) $ptr
979   xgetptr Qnil
980   set $nil = $ptr
981   set $i = 0
982   while $cons != $nil && $i < 10
983     p/x $cons->car
984     xpr
985     xgetptr $cons->u.cdr
986     set $cons = (struct Lisp_Cons *) $ptr
987     set $i = $i + 1
988     printf "---\n"
989   end
990   if $cons == $nil
991     printf "nil\n"
992   else
993     printf "...\n"
994     p $ptr
995   end
997 document xlist
998 Print $ assuming it is a list.
1001 define xfloat
1002   xgetptr $
1003   print ((struct Lisp_Float *) $ptr)->u.data
1005 document xfloat
1006 Print $ assuming it is a lisp floating-point number.
1009 define xscrollbar
1010   xgetptr $
1011   print (struct scrollbar *) $ptr
1012 output *$
1013 echo \n
1015 document xscrollbar
1016 Print $ as a scrollbar pointer.
1019 define xpr
1020   xtype
1021   if $type == Lisp_Int
1022     xint
1023   end
1024   if $type == Lisp_Symbol
1025     xsymbol
1026   end
1027   if $type == Lisp_String
1028     xstring
1029   end
1030   if $type == Lisp_Cons
1031     xcons
1032   end
1033   if $type == Lisp_Float
1034     xfloat
1035   end
1036   if $type == Lisp_Misc
1037     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1038     if $misc == Lisp_Misc_Free
1039       xmiscfree
1040     end
1041     if $misc == Lisp_Misc_Boolfwd
1042       xboolfwd
1043     end
1044     if $misc == Lisp_Misc_Marker
1045       xmarker
1046     end
1047     if $misc == Lisp_Misc_Intfwd
1048       xintfwd
1049     end
1050     if $misc == Lisp_Misc_Boolfwd
1051       xboolfwd
1052     end
1053     if $misc == Lisp_Misc_Objfwd
1054       xobjfwd
1055     end
1056     if $misc == Lisp_Misc_Buffer_Objfwd
1057       xbufobjfwd
1058     end
1059     if $misc == Lisp_Misc_Buffer_Local_Value
1060       xbuflocal
1061     end
1062 #    if $misc == Lisp_Misc_Some_Buffer_Local_Value
1063 #      xvalue
1064 #    end
1065     if $misc == Lisp_Misc_Overlay
1066       xoverlay
1067     end
1068     if $misc == Lisp_Misc_Kboard_Objfwd
1069       xkbobjfwd
1070     end
1071 #    if $misc == Lisp_Misc_Save_Value
1072 #      xsavevalue
1073 #    end
1074   end
1075   if $type == Lisp_Vectorlike
1076     set $size = ((struct Lisp_Vector *) $ptr)->size
1077     if ($size & PVEC_FLAG)
1078       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1079       if $vec == PVEC_NORMAL_VECTOR
1080         xvector
1081       end
1082       if $vec == PVEC_PROCESS
1083         xprocess
1084       end
1085       if $vec == PVEC_FRAME
1086         xframe
1087       end
1088       if $vec == PVEC_COMPILED
1089         xcompiled
1090       end
1091       if $vec == PVEC_WINDOW
1092         xwindow
1093       end
1094       if $vec == PVEC_WINDOW_CONFIGURATION
1095         xwinconfig
1096       end
1097       if $vec == PVEC_SUBR
1098         xsubr
1099       end
1100       if $vec == PVEC_CHAR_TABLE
1101         xchartable
1102       end
1103       if $vec == PVEC_BOOL_VECTOR
1104         xboolvector
1105       end
1106       if $vec == PVEC_BUFFER
1107         xbuffer
1108       end
1109       if $vec == PVEC_HASH_TABLE
1110         xhashtable
1111       end
1112     else
1113       xvector
1114     end
1115   end
1117 document xpr
1118 Print $ as a lisp object of any type.
1121 define xprintstr
1122   set $data = (char *) $arg0->data
1123   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1126 define xprintsym
1127   xgetptr $arg0
1128   set $sym = (struct Lisp_Symbol *) $ptr
1129   xgetptr $sym->xname
1130   set $sym_name = (struct Lisp_String *) $ptr
1131   xprintstr $sym_name
1133 document xprintsym
1134   Print argument as a symbol.
1137 define xcoding
1138   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1139   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1140   set $name = $tmp->contents[$arg0 * 2]
1141   print $name
1142   pr
1143   print $tmp->contents[$arg0 * 2 + 1]
1144   pr
1146 document xcoding
1147   Print the name and attributes of coding system that has ID (argument).
1150 define xcharset
1151   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1152   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1153   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1154   pr
1156 document xcharset
1157   Print the name of charset that has ID (argument).
1160 define xfontset
1161   xgetptr $
1162   set $tbl = (struct Lisp_Char_Table *) $ptr
1163   print $tbl
1164   xgetint $tbl->extras[0]
1165   printf " ID:%d", $int
1166   xgettype $tbl->extras[1]
1167   xgetptr $tbl->extras[1]
1168   if $type == Lisp_String
1169     set $ptr = (struct Lisp_String *) $ptr
1170     printf " Name:"
1171     xprintstr $ptr
1172   else
1173     xgetptr $tbl->extras[2]
1174     set $ptr = (struct Lisp_Char_Table *) $ptr
1175     xgetptr $ptr->extras[1]
1176     set $ptr = (struct Lisp_String *) $ptr
1177     printf " Realized from:"
1178     xprintstr $ptr
1179   end
1180   echo \n
1183 define xfont
1184   xgetptr $
1185   set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1186   if $size == FONT_SPEC_MAX
1187     print (struct font_spec *) $ptr
1188   else
1189     if $size == FONT_ENTITY_MAX
1190       print (struct font_entity *) $ptr
1191     else
1192       print (struct font *) $ptr
1193     end
1194   end
1196 document xfont
1197 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1200 define xbacktrace
1201   set $bt = backtrace_list
1202   while $bt
1203     xgettype (*$bt->function)
1204     if $type == Lisp_Symbol
1205       xprintsym (*$bt->function)
1206       printf " (0x%x)\n", $bt->args
1207     else
1208       printf "0x%x ", *$bt->function
1209       if $type == Lisp_Vectorlike
1210         xgetptr (*$bt->function)
1211         set $size = ((struct Lisp_Vector *) $ptr)->size
1212         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1213       else
1214         printf "Lisp type %d", $type
1215       end
1216       echo \n
1217     end
1218     set $bt = $bt->next
1219   end
1221 document xbacktrace
1222   Print a backtrace of Lisp function calls from backtrace_list.
1223   Set a breakpoint at Fsignal and call this to see from where
1224   an error was signaled.
1227 define which
1228   set debug_print (which_symbols ($arg0))
1230 document which
1231   Print symbols which references a given lisp object
1232   either as its symbol value or symbol function.
1235 define xbytecode
1236   set $bt = byte_stack_list
1237   while $bt
1238     xgettype ($bt->byte_string)
1239     printf "0x%x => ", $bt->byte_string
1240     which $bt->byte_string
1241     set $bt = $bt->next
1242   end
1244 document xbytecode
1245   Print a backtrace of the byte code stack.
1248 # Show Lisp backtrace after normal backtrace.
1249 define hookpost-backtrace
1250   set $bt = backtrace_list
1251   if $bt
1252     echo \n
1253     echo Lisp Backtrace:\n
1254     xbacktrace
1255   end
1258 define xreload
1259   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1260   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1262 document xreload
1263   When starting Emacs a second time in the same gdb session under
1264   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1265   their values.  (The same happens on current (2000) versions of GNU/Linux
1266   with gdb 5.0.)
1267   This function reloads them.
1269 xreload
1271 # Flush display (X only)
1272 define ff
1273   set x_flush (0)
1275 document ff
1276 Flush pending X window display updates to screen.
1277 Works only when an inferior emacs is executing.
1281 define hook-run
1282   xreload
1285 # Call xreload if a new Emacs executable is loaded.
1286 define hookpost-run
1287   xreload
1290 set print pretty on
1291 set print sevenbit-strings
1293 show environment DISPLAY
1294 show environment TERM
1296 # People get bothered when they see messages about non-existent functions...
1297 xgetptr Vsystem_type
1298 # $ptr is NULL in temacs
1299 if ($ptr != 0)
1300   set $tem = (struct Lisp_Symbol *) $ptr
1301   xgetptr $tem->xname
1302   set $tem = (struct Lisp_String *) $ptr
1303   set $tem = (char *) $tem->data
1305   # Don't let abort actually run, as it will make stdio stop working and
1306   # therefore the `pr' command above as well.
1307   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1308     # The windows-nt build replaces abort with its own function.
1309     break w32_abort
1310   else
1311     break abort
1312   end
1315 # x_error_quitter is defined only on X.  But window-system is set up
1316 # only at run time, during Emacs startup, so we need to defer setting
1317 # the breakpoint.  init_sys_modes is the first function called on
1318 # every platform after init_display, where window-system is set.
1319 tbreak init_sys_modes
1320 commands
1321   silent
1322   xgetptr Vinitial_window_system
1323   set $tem = (struct Lisp_Symbol *) $ptr
1324   xgetptr $tem->xname
1325   set $tem = (struct Lisp_String *) $ptr
1326   set $tem = (char *) $tem->data
1327   # If we are running in synchronous mode, we want a chance to look
1328   # around before Emacs exits.  Perhaps we should put the break
1329   # somewhere else instead...
1330   if $tem[0] == 'x' && $tem[1] == '\0'
1331     break x_error_quitter
1332   end
1333   continue
1335 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe