Code cleanup. Added ChangeLog entry.
[emacs.git] / src / .gdbinit
blob1fd7e288736b92e8ccd0380b89842506d0e012b0
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 "edges=(%d,%d),r2l=%d,cont=%d,trunc=(%d,%d),at_zv=%d\n", $arg0->minpos.charpos, $arg0->maxpos.charpos, $arg0->reversed_p, $arg0->continued_p, $arg0->truncated_on_left_p, $arg0->truncated_on_right_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 - 1
630   set $i = 0
631   while ($gl < $glend)
632     printf "%d: ", $i
633     prowlims $gl
634     set $gl = $gl + 1
635     set $i = $i + 1
636   end
638 document pmtxrows
639 Print data about glyph rows in a glyph matrix.
640 Takes one argument, a pointer to a glyph_matrix structure.
643 define xtype
644   xgettype $
645   output $type
646   echo \n
647   if $type == Lisp_Misc
648     xmisctype
649   else
650     if $type == Lisp_Vectorlike
651       xvectype
652     end
653   end
655 document xtype
656 Print the type of $, assuming it is an Emacs Lisp value.
657 If the first type printed is Lisp_Vector or Lisp_Misc,
658 a second line gives the more precise type.
661 define xvectype
662   xgetptr $
663   set $size = ((struct Lisp_Vector *) $ptr)->size
664   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
665   echo \n
667 document xvectype
668 Print the size or vector subtype of $.
669 This command assumes that $ is a vector or pseudovector.
672 define xmisctype
673   xgetptr $
674   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
675   echo \n
677 document xmisctype
678 Assume that $ is some misc type and print its specific type.
681 define xint
682   xgetint $
683   print $int
685 document xint
686 Print $ as an Emacs Lisp integer.  This gets the sign right.
689 define xptr
690   xgetptr $
691   print (void *) $ptr
693 document xptr
694 Print the pointer portion of an Emacs Lisp value in $.
697 define xmarker
698   xgetptr $
699   print (struct Lisp_Marker *) $ptr
701 document xmarker
702 Print $ as a marker pointer.
703 This command assumes that $ is an Emacs Lisp marker value.
706 define xoverlay
707   xgetptr $
708   print (struct Lisp_Overlay *) $ptr
710 document xoverlay
711 Print $ as a overlay pointer.
712 This command assumes that $ is an Emacs Lisp overlay value.
715 define xmiscfree
716   xgetptr $
717   print (struct Lisp_Free *) $ptr
719 document xmiscfree
720 Print $ as a misc free-cell pointer.
721 This command assumes that $ is an Emacs Lisp Misc value.
724 define xintfwd
725   xgetptr $
726   print (struct Lisp_Intfwd *) $ptr
728 document xintfwd
729 Print $ as an integer forwarding pointer.
730 This command assumes that $ is an Emacs Lisp Misc value.
733 define xboolfwd
734   xgetptr $
735   print (struct Lisp_Boolfwd *) $ptr
737 document xboolfwd
738 Print $ as a boolean forwarding pointer.
739 This command assumes that $ is an Emacs Lisp Misc value.
742 define xobjfwd
743   xgetptr $
744   print (struct Lisp_Objfwd *) $ptr
746 document xobjfwd
747 Print $ as an object forwarding pointer.
748 This command assumes that $ is an Emacs Lisp Misc value.
751 define xbufobjfwd
752   xgetptr $
753   print (struct Lisp_Buffer_Objfwd *) $ptr
755 document xbufobjfwd
756 Print $ as a buffer-local object forwarding pointer.
757 This command assumes that $ is an Emacs Lisp Misc value.
760 define xkbobjfwd
761   xgetptr $
762   print (struct Lisp_Kboard_Objfwd *) $ptr
764 document xkbobjfwd
765 Print $ as a kboard-local object forwarding pointer.
766 This command assumes that $ is an Emacs Lisp Misc value.
769 define xbuflocal
770   xgetptr $
771   print (struct Lisp_Buffer_Local_Value *) $ptr
773 document xbuflocal
774 Print $ as a buffer-local-value pointer.
775 This command assumes that $ is an Emacs Lisp Misc value.
778 define xsymbol
779   set $sym = $
780   xgetptr $sym
781   print (struct Lisp_Symbol *) $ptr
782   xprintsym $sym
783   echo \n
785 document xsymbol
786 Print the name and address of the symbol $.
787 This command assumes that $ is an Emacs Lisp symbol value.
790 define xstring
791   xgetptr $
792   print (struct Lisp_String *) $ptr
793   xprintstr $
794   echo \n
796 document xstring
797 Print the contents and address of the string $.
798 This command assumes that $ is an Emacs Lisp string value.
801 define xvector
802   xgetptr $
803   print (struct Lisp_Vector *) $ptr
804   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
805 echo \n
807 document xvector
808 Print the contents and address of the vector $.
809 This command assumes that $ is an Emacs Lisp vector value.
812 define xprocess
813   xgetptr $
814   print (struct Lisp_Process *) $ptr
815   output *$
816   echo \n
818 document xprocess
819 Print the address of the struct Lisp_process to which $ points.
820 This command assumes that $ is a Lisp_Object.
823 define xframe
824   xgetptr $
825   print (struct frame *) $ptr
826   xgetptr $->name
827   set $ptr = (struct Lisp_String *) $ptr
828   xprintstr $ptr
829   echo \n
831 document xframe
832 Print $ as a frame pointer.
833 This command assumes $ is an Emacs Lisp frame value.
836 define xcompiled
837   xgetptr $
838   print (struct Lisp_Vector *) $ptr
839   output ($->contents[0])@($->size & 0xff)
841 document xcompiled
842 Print $ as a compiled function pointer.
843 This command assumes that $ is an Emacs Lisp compiled value.
846 define xwindow
847   xgetptr $
848   print (struct window *) $ptr
849   set $window = (struct window *) $ptr
850   xgetint $window->total_cols
851   set $width=$int
852   xgetint $window->total_lines
853   set $height=$int
854   xgetint $window->left_col
855   set $left=$int
856   xgetint $window->top_line
857   set $top=$int
858   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
860 document xwindow
861 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
862 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
865 define xwinconfig
866   xgetptr $
867   print (struct save_window_data *) $ptr
869 document xwinconfig
870 Print $ as a window configuration pointer.
871 This command assumes that $ is an Emacs Lisp window configuration value.
874 define xsubr
875   xgetptr $
876   print (struct Lisp_Subr *) $ptr
877   output *$
878   echo \n
880 document xsubr
881 Print the address of the subr which the Lisp_Object $ points to.
884 define xchartable
885   xgetptr $
886   print (struct Lisp_Char_Table *) $ptr
887   printf "Purpose: "
888   xprintsym $->purpose
889   printf "  %d extra slots", ($->size & 0x1ff) - 68
890   echo \n
892 document xchartable
893 Print the address of the char-table $, and its purpose.
894 This command assumes that $ is an Emacs Lisp char-table value.
897 define xsubchartable
898   xgetptr $
899   print (struct Lisp_Sub_Char_Table *) $ptr
900   xgetint $->depth
901   set $depth = $int
902   xgetint $->min_char
903   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
905 document xsubchartable
906 Print the address of the sub-char-table $, its depth and min-char.
907 This command assumes that $ is an Emacs Lisp sub-char-table value.
910 define xboolvector
911   xgetptr $
912   print (struct Lisp_Bool_Vector *) $ptr
913   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
914   echo \n
916 document xboolvector
917 Print the contents and address of the bool-vector $.
918 This command assumes that $ is an Emacs Lisp bool-vector value.
921 define xbuffer
922   xgetptr $
923   print (struct buffer *) $ptr
924   xgetptr $->name
925   output ((struct Lisp_String *) $ptr)->data
926   echo \n
928 document xbuffer
929 Set $ as a buffer pointer and the name of the buffer.
930 This command assumes $ is an Emacs Lisp buffer value.
933 define xhashtable
934   xgetptr $
935   print (struct Lisp_Hash_Table *) $ptr
937 document xhashtable
938 Set $ as a hash table pointer.
939 This command assumes that $ is an Emacs Lisp hash table value.
942 define xcons
943   xgetptr $
944   print (struct Lisp_Cons *) $ptr
945   output/x *$
946   echo \n
948 document xcons
949 Print the contents of $ as an Emacs Lisp cons.
952 define nextcons
953   p $.u.cdr
954   xcons
956 document nextcons
957 Print the contents of the next cell in a list.
958 This command assumes that the last thing you printed was a cons cell contents
959 (type struct Lisp_Cons) or a pointer to one.
961 define xcar
962   xgetptr $
963   xgettype $
964   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
966 document xcar
967 Assume that $ is an Emacs Lisp pair and print its car.
970 define xcdr
971   xgetptr $
972   xgettype $
973   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
975 document xcdr
976 Assume that $ is an Emacs Lisp pair and print its cdr.
979 define xlist
980   xgetptr $
981   set $cons = (struct Lisp_Cons *) $ptr
982   xgetptr Qnil
983   set $nil = $ptr
984   set $i = 0
985   while $cons != $nil && $i < 10
986     p/x $cons->car
987     xpr
988     xgetptr $cons->u.cdr
989     set $cons = (struct Lisp_Cons *) $ptr
990     set $i = $i + 1
991     printf "---\n"
992   end
993   if $cons == $nil
994     printf "nil\n"
995   else
996     printf "...\n"
997     p $ptr
998   end
1000 document xlist
1001 Print $ assuming it is a list.
1004 define xfloat
1005   xgetptr $
1006   print ((struct Lisp_Float *) $ptr)->u.data
1008 document xfloat
1009 Print $ assuming it is a lisp floating-point number.
1012 define xscrollbar
1013   xgetptr $
1014   print (struct scrollbar *) $ptr
1015 output *$
1016 echo \n
1018 document xscrollbar
1019 Print $ as a scrollbar pointer.
1022 define xpr
1023   xtype
1024   if $type == Lisp_Int
1025     xint
1026   end
1027   if $type == Lisp_Symbol
1028     xsymbol
1029   end
1030   if $type == Lisp_String
1031     xstring
1032   end
1033   if $type == Lisp_Cons
1034     xcons
1035   end
1036   if $type == Lisp_Float
1037     xfloat
1038   end
1039   if $type == Lisp_Misc
1040     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1041     if $misc == Lisp_Misc_Free
1042       xmiscfree
1043     end
1044     if $misc == Lisp_Misc_Boolfwd
1045       xboolfwd
1046     end
1047     if $misc == Lisp_Misc_Marker
1048       xmarker
1049     end
1050     if $misc == Lisp_Misc_Intfwd
1051       xintfwd
1052     end
1053     if $misc == Lisp_Misc_Boolfwd
1054       xboolfwd
1055     end
1056     if $misc == Lisp_Misc_Objfwd
1057       xobjfwd
1058     end
1059     if $misc == Lisp_Misc_Buffer_Objfwd
1060       xbufobjfwd
1061     end
1062     if $misc == Lisp_Misc_Buffer_Local_Value
1063       xbuflocal
1064     end
1065 #    if $misc == Lisp_Misc_Some_Buffer_Local_Value
1066 #      xvalue
1067 #    end
1068     if $misc == Lisp_Misc_Overlay
1069       xoverlay
1070     end
1071     if $misc == Lisp_Misc_Kboard_Objfwd
1072       xkbobjfwd
1073     end
1074 #    if $misc == Lisp_Misc_Save_Value
1075 #      xsavevalue
1076 #    end
1077   end
1078   if $type == Lisp_Vectorlike
1079     set $size = ((struct Lisp_Vector *) $ptr)->size
1080     if ($size & PVEC_FLAG)
1081       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1082       if $vec == PVEC_NORMAL_VECTOR
1083         xvector
1084       end
1085       if $vec == PVEC_PROCESS
1086         xprocess
1087       end
1088       if $vec == PVEC_FRAME
1089         xframe
1090       end
1091       if $vec == PVEC_COMPILED
1092         xcompiled
1093       end
1094       if $vec == PVEC_WINDOW
1095         xwindow
1096       end
1097       if $vec == PVEC_WINDOW_CONFIGURATION
1098         xwinconfig
1099       end
1100       if $vec == PVEC_SUBR
1101         xsubr
1102       end
1103       if $vec == PVEC_CHAR_TABLE
1104         xchartable
1105       end
1106       if $vec == PVEC_BOOL_VECTOR
1107         xboolvector
1108       end
1109       if $vec == PVEC_BUFFER
1110         xbuffer
1111       end
1112       if $vec == PVEC_HASH_TABLE
1113         xhashtable
1114       end
1115     else
1116       xvector
1117     end
1118   end
1120 document xpr
1121 Print $ as a lisp object of any type.
1124 define xprintstr
1125   set $data = (char *) $arg0->data
1126   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1129 define xprintsym
1130   xgetptr $arg0
1131   set $sym = (struct Lisp_Symbol *) $ptr
1132   xgetptr $sym->xname
1133   set $sym_name = (struct Lisp_String *) $ptr
1134   xprintstr $sym_name
1136 document xprintsym
1137   Print argument as a symbol.
1140 define xcoding
1141   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1142   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1143   set $name = $tmp->contents[$arg0 * 2]
1144   print $name
1145   pr
1146   print $tmp->contents[$arg0 * 2 + 1]
1147   pr
1149 document xcoding
1150   Print the name and attributes of coding system that has ID (argument).
1153 define xcharset
1154   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1155   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1156   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1157   pr
1159 document xcharset
1160   Print the name of charset that has ID (argument).
1163 define xfontset
1164   xgetptr $
1165   set $tbl = (struct Lisp_Char_Table *) $ptr
1166   print $tbl
1167   xgetint $tbl->extras[0]
1168   printf " ID:%d", $int
1169   xgettype $tbl->extras[1]
1170   xgetptr $tbl->extras[1]
1171   if $type == Lisp_String
1172     set $ptr = (struct Lisp_String *) $ptr
1173     printf " Name:"
1174     xprintstr $ptr
1175   else
1176     xgetptr $tbl->extras[2]
1177     set $ptr = (struct Lisp_Char_Table *) $ptr
1178     xgetptr $ptr->extras[1]
1179     set $ptr = (struct Lisp_String *) $ptr
1180     printf " Realized from:"
1181     xprintstr $ptr
1182   end
1183   echo \n
1186 define xfont
1187   xgetptr $
1188   set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1189   if $size == FONT_SPEC_MAX
1190     print (struct font_spec *) $ptr
1191   else
1192     if $size == FONT_ENTITY_MAX
1193       print (struct font_entity *) $ptr
1194     else
1195       print (struct font *) $ptr
1196     end
1197   end
1199 document xfont
1200 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1203 define xbacktrace
1204   set $bt = backtrace_list
1205   while $bt
1206     xgettype (*$bt->function)
1207     if $type == Lisp_Symbol
1208       xprintsym (*$bt->function)
1209       printf " (0x%x)\n", $bt->args
1210     else
1211       printf "0x%x ", *$bt->function
1212       if $type == Lisp_Vectorlike
1213         xgetptr (*$bt->function)
1214         set $size = ((struct Lisp_Vector *) $ptr)->size
1215         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1216       else
1217         printf "Lisp type %d", $type
1218       end
1219       echo \n
1220     end
1221     set $bt = $bt->next
1222   end
1224 document xbacktrace
1225   Print a backtrace of Lisp function calls from backtrace_list.
1226   Set a breakpoint at Fsignal and call this to see from where
1227   an error was signaled.
1230 define which
1231   set debug_print (which_symbols ($arg0))
1233 document which
1234   Print symbols which references a given lisp object
1235   either as its symbol value or symbol function.
1238 define xbytecode
1239   set $bt = byte_stack_list
1240   while $bt
1241     xgettype ($bt->byte_string)
1242     printf "0x%x => ", $bt->byte_string
1243     which $bt->byte_string
1244     set $bt = $bt->next
1245   end
1247 document xbytecode
1248   Print a backtrace of the byte code stack.
1251 # Show Lisp backtrace after normal backtrace.
1252 define hookpost-backtrace
1253   set $bt = backtrace_list
1254   if $bt
1255     echo \n
1256     echo Lisp Backtrace:\n
1257     xbacktrace
1258   end
1261 define xreload
1262   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1263   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1265 document xreload
1266   When starting Emacs a second time in the same gdb session under
1267   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1268   their values.  (The same happens on current (2000) versions of GNU/Linux
1269   with gdb 5.0.)
1270   This function reloads them.
1272 xreload
1274 # Flush display (X only)
1275 define ff
1276   set x_flush (0)
1278 document ff
1279 Flush pending X window display updates to screen.
1280 Works only when an inferior emacs is executing.
1284 define hook-run
1285   xreload
1288 # Call xreload if a new Emacs executable is loaded.
1289 define hookpost-run
1290   xreload
1293 set print pretty on
1294 set print sevenbit-strings
1296 show environment DISPLAY
1297 show environment TERM
1299 # People get bothered when they see messages about non-existent functions...
1300 xgetptr Vsystem_type
1301 # $ptr is NULL in temacs
1302 if ($ptr != 0)
1303   set $tem = (struct Lisp_Symbol *) $ptr
1304   xgetptr $tem->xname
1305   set $tem = (struct Lisp_String *) $ptr
1306   set $tem = (char *) $tem->data
1308   # Don't let abort actually run, as it will make stdio stop working and
1309   # therefore the `pr' command above as well.
1310   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1311     # The windows-nt build replaces abort with its own function.
1312     break w32_abort
1313   else
1314     break abort
1315   end
1318 # x_error_quitter is defined only on X.  But window-system is set up
1319 # only at run time, during Emacs startup, so we need to defer setting
1320 # the breakpoint.  init_sys_modes is the first function called on
1321 # every platform after init_display, where window-system is set.
1322 tbreak init_sys_modes
1323 commands
1324   silent
1325   xgetptr Vinitial_window_system
1326   set $tem = (struct Lisp_Symbol *) $ptr
1327   xgetptr $tem->xname
1328   set $tem = (struct Lisp_String *) $ptr
1329   set $tem = (char *) $tem->data
1330   # If we are running in synchronous mode, we want a chance to look
1331   # around before Emacs exits.  Perhaps we should put the break
1332   # somewhere else instead...
1333   if $tem[0] == 'x' && $tem[1] == '\0'
1334     break x_error_quitter
1335   end
1336   continue
1338 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe