* fontset.c (free_realized_fontset): Mark unreachable code with if (0).
[emacs.git] / src / .gdbinit
blob463caf5a68cc251caecfca533db90b23a8236a4e
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 #   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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 ? (gdb_use_lsb ? $bugfix.u.val << gdb_gctypebits : $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->slice.cmp.from, $g->slice.cmp.to
498   end
499   # GLYPHLESS_GLYPH
500   if ($g->type == 2)
501     printf "GLYPHLESS["
502     if ($g->u.glyphless.method == 0)
503       printf "THIN]"
504     end
505     if ($g->u.glyphless.method == 1)
506       printf "EMPTY]"
507     end
508     if ($g->u.glyphless.method == 2)
509       printf "ACRO]"
510     end
511     if ($g->u.glyphless.method == 3)
512       printf "HEX]"
513     end
514   end
515   # IMAGE_GLYPH
516   if ($g->type == 3)
517     printf "IMAGE[%d]", $g->u.img_id
518   end
519   # STRETCH_GLYPH
520   if ($g->type == 4)
521     printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
522   end
523   xgettype ($g->object)
524   if ($type == Lisp_String)
525     printf " str=%x[%d]", $g->object, $g->charpos
526   else
527     printf " pos=%d", $g->charpos
528   end
529   # For characters, print their resolved level and bidi type
530   if ($g->type == 0)
531     printf " blev=%d,btyp=", $g->resolved_level
532     pbiditype $g->bidi_type
533   end
534   printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
535   # If not DEFAULT_FACE_ID
536   if ($g->face_id != 0)
537     printf " face=%d", $g->face_id
538   end
539   if ($g->voffset)
540     printf " vof=%d", $g->voffset
541   end
542   if ($g->multibyte_p)
543     printf " MB"
544   end
545   if ($g->padding_p)
546     printf " PAD"
547   end
548   if ($g->glyph_not_available_p)
549     printf " N/A"
550   end
551   if ($g->overlaps_vertically_p)
552     printf " OVL"
553   end
554   if ($g->avoid_cursor_p)
555     printf " AVOID"
556   end
557   if ($g->left_box_line_p)
558     printf " ["
559   end
560   if ($g->right_box_line_p)
561     printf " ]"
562   end
563   if ($g->slice.img.x || $g->slice.img.y || $g->slice.img.width || $g->slice.img.height)
564     printf " slice=%d,%d,%d,%d" ,$g->slice.img.x, $g->slice.img.y, $g->slice.img.width, $g->slice.img.height
565   end
566   printf "\n"
568 document pgx
569 Pretty print a glyph structure.
570 Takes one argument, a pointer to a glyph structure.
573 define pg
574   set $pgidx = 0
575   pgx glyph
577 document pg
578 Pretty print glyph structure glyph.
581 define pgi
582   set $pgidx = $arg0
583   pgx (&glyph[$pgidx])
585 document pgi
586 Pretty print glyph structure glyph[I].
587 Takes one argument, a integer I.
590 define pgn
591   set $pgidx = $pgidx + 1
592   pgx (&glyph[$pgidx])
594 document pgn
595 Pretty print next glyph structure.
598 define pgrowx
599   set $row = $arg0
600   set $area = 0
601   set $xofs = $row->x
602   while ($area < 3)
603     set $used = $row->used[$area]
604     if ($used > 0)
605       set $gl0 = $row->glyphs[$area]
606       set $pgidx = 0
607       printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
608       while ($pgidx < $used)
609         printf "%3d %4d: ", $pgidx, $xofs
610         pgx $gl0[$pgidx]
611         set $xofs = $xofs + $gl0[$pgidx]->pixel_width
612         set $pgidx = $pgidx + 1
613       end
614     end
615     set $area = $area + 1
616   end
618 document pgrowx
619 Pretty print all glyphs in a row structure.
620 Takes one argument, a pointer to a row structure.
623 define pgrow
624   pgrowx row
626 document pgrow
627 Pretty print all glyphs in row structure row.
630 define pgrowit
631   pgrowx it->glyph_row
633 document pgrowit
634 Pretty print all glyphs in it->glyph_row.
637 define prowlims
638   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
640 document prowlims
641 Print important attributes of a glyph_row structure.
642 Takes one argument, a pointer to a glyph_row structure.
645 define pmtxrows
646   set $mtx = $arg0
647   set $gl = $mtx->rows
648   set $glend = $mtx->rows + $mtx->nrows - 1
649   set $i = 0
650   while ($gl < $glend)
651     printf "%d: ", $i
652     prowlims $gl
653     set $gl = $gl + 1
654     set $i = $i + 1
655   end
657 document pmtxrows
658 Print data about glyph rows in a glyph matrix.
659 Takes one argument, a pointer to a glyph_matrix structure.
662 define xtype
663   xgettype $
664   output $type
665   echo \n
666   if $type == Lisp_Misc
667     xmisctype
668   else
669     if $type == Lisp_Vectorlike
670       xvectype
671     end
672   end
674 document xtype
675 Print the type of $, assuming it is an Emacs Lisp value.
676 If the first type printed is Lisp_Vector or Lisp_Misc,
677 a second line gives the more precise type.
680 define xvectype
681   xgetptr $
682   set $size = ((struct Lisp_Vector *) $ptr)->size
683   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
684   echo \n
686 document xvectype
687 Print the size or vector subtype of $.
688 This command assumes that $ is a vector or pseudovector.
691 define xmisctype
692   xgetptr $
693   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
694   echo \n
696 document xmisctype
697 Assume that $ is some misc type and print its specific type.
700 define xint
701   xgetint $
702   print $int
704 document xint
705 Print $ as an Emacs Lisp integer.  This gets the sign right.
708 define xptr
709   xgetptr $
710   print (void *) $ptr
712 document xptr
713 Print the pointer portion of an Emacs Lisp value in $.
716 define xmarker
717   xgetptr $
718   print (struct Lisp_Marker *) $ptr
720 document xmarker
721 Print $ as a marker pointer.
722 This command assumes that $ is an Emacs Lisp marker value.
725 define xoverlay
726   xgetptr $
727   print (struct Lisp_Overlay *) $ptr
729 document xoverlay
730 Print $ as a overlay pointer.
731 This command assumes that $ is an Emacs Lisp overlay value.
734 define xmiscfree
735   xgetptr $
736   print (struct Lisp_Free *) $ptr
738 document xmiscfree
739 Print $ as a misc free-cell pointer.
740 This command assumes that $ is an Emacs Lisp Misc value.
743 define xintfwd
744   xgetptr $
745   print (struct Lisp_Intfwd *) $ptr
747 document xintfwd
748 Print $ as an integer forwarding pointer.
749 This command assumes that $ is an Emacs Lisp Misc value.
752 define xboolfwd
753   xgetptr $
754   print (struct Lisp_Boolfwd *) $ptr
756 document xboolfwd
757 Print $ as a boolean forwarding pointer.
758 This command assumes that $ is an Emacs Lisp Misc value.
761 define xobjfwd
762   xgetptr $
763   print (struct Lisp_Objfwd *) $ptr
765 document xobjfwd
766 Print $ as an object forwarding pointer.
767 This command assumes that $ is an Emacs Lisp Misc value.
770 define xbufobjfwd
771   xgetptr $
772   print (struct Lisp_Buffer_Objfwd *) $ptr
774 document xbufobjfwd
775 Print $ as a buffer-local object forwarding pointer.
776 This command assumes that $ is an Emacs Lisp Misc value.
779 define xkbobjfwd
780   xgetptr $
781   print (struct Lisp_Kboard_Objfwd *) $ptr
783 document xkbobjfwd
784 Print $ as a kboard-local object forwarding pointer.
785 This command assumes that $ is an Emacs Lisp Misc value.
788 define xbuflocal
789   xgetptr $
790   print (struct Lisp_Buffer_Local_Value *) $ptr
792 document xbuflocal
793 Print $ as a buffer-local-value pointer.
794 This command assumes that $ is an Emacs Lisp Misc value.
797 define xsymbol
798   set $sym = $
799   xgetptr $sym
800   print (struct Lisp_Symbol *) $ptr
801   xprintsym $sym
802   echo \n
804 document xsymbol
805 Print the name and address of the symbol $.
806 This command assumes that $ is an Emacs Lisp symbol value.
809 define xstring
810   xgetptr $
811   print (struct Lisp_String *) $ptr
812   xprintstr $
813   echo \n
815 document xstring
816 Print the contents and address of the string $.
817 This command assumes that $ is an Emacs Lisp string value.
820 define xvector
821   xgetptr $
822   print (struct Lisp_Vector *) $ptr
823   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
824 echo \n
826 document xvector
827 Print the contents and address of the vector $.
828 This command assumes that $ is an Emacs Lisp vector value.
831 define xprocess
832   xgetptr $
833   print (struct Lisp_Process *) $ptr
834   output *$
835   echo \n
837 document xprocess
838 Print the address of the struct Lisp_process to which $ points.
839 This command assumes that $ is a Lisp_Object.
842 define xframe
843   xgetptr $
844   print (struct frame *) $ptr
845   xgetptr $->name
846   set $ptr = (struct Lisp_String *) $ptr
847   xprintstr $ptr
848   echo \n
850 document xframe
851 Print $ as a frame pointer.
852 This command assumes $ is an Emacs Lisp frame value.
855 define xcompiled
856   xgetptr $
857   print (struct Lisp_Vector *) $ptr
858   output ($->contents[0])@($->size & 0xff)
860 document xcompiled
861 Print $ as a compiled function pointer.
862 This command assumes that $ is an Emacs Lisp compiled value.
865 define xwindow
866   xgetptr $
867   print (struct window *) $ptr
868   set $window = (struct window *) $ptr
869   xgetint $window->total_cols
870   set $width=$int
871   xgetint $window->total_lines
872   set $height=$int
873   xgetint $window->left_col
874   set $left=$int
875   xgetint $window->top_line
876   set $top=$int
877   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
879 document xwindow
880 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
881 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
884 define xwinconfig
885   xgetptr $
886   print (struct save_window_data *) $ptr
888 document xwinconfig
889 Print $ as a window configuration pointer.
890 This command assumes that $ is an Emacs Lisp window configuration value.
893 define xsubr
894   xgetptr $
895   print (struct Lisp_Subr *) $ptr
896   output *$
897   echo \n
899 document xsubr
900 Print the address of the subr which the Lisp_Object $ points to.
903 define xchartable
904   xgetptr $
905   print (struct Lisp_Char_Table *) $ptr
906   printf "Purpose: "
907   xprintsym $->purpose
908   printf "  %d extra slots", ($->size & 0x1ff) - 68
909   echo \n
911 document xchartable
912 Print the address of the char-table $, and its purpose.
913 This command assumes that $ is an Emacs Lisp char-table value.
916 define xsubchartable
917   xgetptr $
918   print (struct Lisp_Sub_Char_Table *) $ptr
919   xgetint $->depth
920   set $depth = $int
921   xgetint $->min_char
922   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
924 document xsubchartable
925 Print the address of the sub-char-table $, its depth and min-char.
926 This command assumes that $ is an Emacs Lisp sub-char-table value.
929 define xboolvector
930   xgetptr $
931   print (struct Lisp_Bool_Vector *) $ptr
932   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
933   echo \n
935 document xboolvector
936 Print the contents and address of the bool-vector $.
937 This command assumes that $ is an Emacs Lisp bool-vector value.
940 define xbuffer
941   xgetptr $
942   print (struct buffer *) $ptr
943   xgetptr $->name
944   output ((struct Lisp_String *) $ptr)->data
945   echo \n
947 document xbuffer
948 Set $ as a buffer pointer and the name of the buffer.
949 This command assumes $ is an Emacs Lisp buffer value.
952 define xhashtable
953   xgetptr $
954   print (struct Lisp_Hash_Table *) $ptr
956 document xhashtable
957 Set $ as a hash table pointer.
958 This command assumes that $ is an Emacs Lisp hash table value.
961 define xcons
962   xgetptr $
963   print (struct Lisp_Cons *) $ptr
964   output/x *$
965   echo \n
967 document xcons
968 Print the contents of $ as an Emacs Lisp cons.
971 define nextcons
972   p $.u.cdr
973   xcons
975 document nextcons
976 Print the contents of the next cell in a list.
977 This command assumes that the last thing you printed was a cons cell contents
978 (type struct Lisp_Cons) or a pointer to one.
980 define xcar
981   xgetptr $
982   xgettype $
983   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
985 document xcar
986 Assume that $ is an Emacs Lisp pair and print its car.
989 define xcdr
990   xgetptr $
991   xgettype $
992   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
994 document xcdr
995 Assume that $ is an Emacs Lisp pair and print its cdr.
998 define xlist
999   xgetptr $
1000   set $cons = (struct Lisp_Cons *) $ptr
1001   xgetptr Qnil
1002   set $nil = $ptr
1003   set $i = 0
1004   while $cons != $nil && $i < 10
1005     p/x $cons->car
1006     xpr
1007     xgetptr $cons->u.cdr
1008     set $cons = (struct Lisp_Cons *) $ptr
1009     set $i = $i + 1
1010     printf "---\n"
1011   end
1012   if $cons == $nil
1013     printf "nil\n"
1014   else
1015     printf "...\n"
1016     p $ptr
1017   end
1019 document xlist
1020 Print $ assuming it is a list.
1023 define xfloat
1024   xgetptr $
1025   print ((struct Lisp_Float *) $ptr)->u.data
1027 document xfloat
1028 Print $ assuming it is a lisp floating-point number.
1031 define xscrollbar
1032   xgetptr $
1033   print (struct scrollbar *) $ptr
1034 output *$
1035 echo \n
1037 document xscrollbar
1038 Print $ as a scrollbar pointer.
1041 define xpr
1042   xtype
1043   if $type == Lisp_Int
1044     xint
1045   end
1046   if $type == Lisp_Symbol
1047     xsymbol
1048   end
1049   if $type == Lisp_String
1050     xstring
1051   end
1052   if $type == Lisp_Cons
1053     xcons
1054   end
1055   if $type == Lisp_Float
1056     xfloat
1057   end
1058   if $type == Lisp_Misc
1059     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1060     if $misc == Lisp_Misc_Free
1061       xmiscfree
1062     end
1063     if $misc == Lisp_Misc_Boolfwd
1064       xboolfwd
1065     end
1066     if $misc == Lisp_Misc_Marker
1067       xmarker
1068     end
1069     if $misc == Lisp_Misc_Intfwd
1070       xintfwd
1071     end
1072     if $misc == Lisp_Misc_Boolfwd
1073       xboolfwd
1074     end
1075     if $misc == Lisp_Misc_Objfwd
1076       xobjfwd
1077     end
1078     if $misc == Lisp_Misc_Buffer_Objfwd
1079       xbufobjfwd
1080     end
1081     if $misc == Lisp_Misc_Buffer_Local_Value
1082       xbuflocal
1083     end
1084 #    if $misc == Lisp_Misc_Some_Buffer_Local_Value
1085 #      xvalue
1086 #    end
1087     if $misc == Lisp_Misc_Overlay
1088       xoverlay
1089     end
1090     if $misc == Lisp_Misc_Kboard_Objfwd
1091       xkbobjfwd
1092     end
1093 #    if $misc == Lisp_Misc_Save_Value
1094 #      xsavevalue
1095 #    end
1096   end
1097   if $type == Lisp_Vectorlike
1098     set $size = ((struct Lisp_Vector *) $ptr)->size
1099     if ($size & PVEC_FLAG)
1100       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1101       if $vec == PVEC_NORMAL_VECTOR
1102         xvector
1103       end
1104       if $vec == PVEC_PROCESS
1105         xprocess
1106       end
1107       if $vec == PVEC_FRAME
1108         xframe
1109       end
1110       if $vec == PVEC_COMPILED
1111         xcompiled
1112       end
1113       if $vec == PVEC_WINDOW
1114         xwindow
1115       end
1116       if $vec == PVEC_WINDOW_CONFIGURATION
1117         xwinconfig
1118       end
1119       if $vec == PVEC_SUBR
1120         xsubr
1121       end
1122       if $vec == PVEC_CHAR_TABLE
1123         xchartable
1124       end
1125       if $vec == PVEC_BOOL_VECTOR
1126         xboolvector
1127       end
1128       if $vec == PVEC_BUFFER
1129         xbuffer
1130       end
1131       if $vec == PVEC_HASH_TABLE
1132         xhashtable
1133       end
1134     else
1135       xvector
1136     end
1137   end
1139 document xpr
1140 Print $ as a lisp object of any type.
1143 define xprintstr
1144   set $data = (char *) $arg0->data
1145   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1148 define xprintsym
1149   xgetptr $arg0
1150   set $sym = (struct Lisp_Symbol *) $ptr
1151   xgetptr $sym->xname
1152   set $sym_name = (struct Lisp_String *) $ptr
1153   xprintstr $sym_name
1155 document xprintsym
1156   Print argument as a symbol.
1159 define xcoding
1160   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1161   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1162   set $name = $tmp->contents[$arg0 * 2]
1163   print $name
1164   pr
1165   print $tmp->contents[$arg0 * 2 + 1]
1166   pr
1168 document xcoding
1169   Print the name and attributes of coding system that has ID (argument).
1172 define xcharset
1173   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1174   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1175   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1176   pr
1178 document xcharset
1179   Print the name of charset that has ID (argument).
1182 define xfontset
1183   xgetptr $
1184   set $tbl = (struct Lisp_Char_Table *) $ptr
1185   print $tbl
1186   xgetint $tbl->extras[0]
1187   printf " ID:%d", $int
1188   xgettype $tbl->extras[1]
1189   xgetptr $tbl->extras[1]
1190   if $type == Lisp_String
1191     set $ptr = (struct Lisp_String *) $ptr
1192     printf " Name:"
1193     xprintstr $ptr
1194   else
1195     xgetptr $tbl->extras[2]
1196     set $ptr = (struct Lisp_Char_Table *) $ptr
1197     xgetptr $ptr->extras[1]
1198     set $ptr = (struct Lisp_String *) $ptr
1199     printf " Realized from:"
1200     xprintstr $ptr
1201   end
1202   echo \n
1205 define xfont
1206   xgetptr $
1207   set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1208   if $size == FONT_SPEC_MAX
1209     print (struct font_spec *) $ptr
1210   else
1211     if $size == FONT_ENTITY_MAX
1212       print (struct font_entity *) $ptr
1213     else
1214       print (struct font *) $ptr
1215     end
1216   end
1218 document xfont
1219 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1222 define xbacktrace
1223   set $bt = backtrace_list
1224   while $bt
1225     xgettype (*$bt->function)
1226     if $type == Lisp_Symbol
1227       xprintsym (*$bt->function)
1228       printf " (0x%x)\n", $bt->args
1229     else
1230       xgetptr *$bt->function
1231       printf "0x%x ", $ptr
1232       if $type == Lisp_Vectorlike
1233         xgetptr (*$bt->function)
1234         set $size = ((struct Lisp_Vector *) $ptr)->size
1235         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1236       else
1237         printf "Lisp type %d", $type
1238       end
1239       echo \n
1240     end
1241     set $bt = $bt->next
1242   end
1244 document xbacktrace
1245   Print a backtrace of Lisp function calls from backtrace_list.
1246   Set a breakpoint at Fsignal and call this to see from where
1247   an error was signaled.
1250 define which
1251   set debug_print (which_symbols ($arg0))
1253 document which
1254   Print symbols which references a given lisp object
1255   either as its symbol value or symbol function.
1258 define xbytecode
1259   set $bt = byte_stack_list
1260   while $bt
1261     xgettype ($bt->byte_string)
1262     printf "0x%x => ", $bt->byte_string
1263     which $bt->byte_string
1264     set $bt = $bt->next
1265   end
1267 document xbytecode
1268   Print a backtrace of the byte code stack.
1271 # Show Lisp backtrace after normal backtrace.
1272 define hookpost-backtrace
1273   set $bt = backtrace_list
1274   if $bt
1275     echo \n
1276     echo Lisp Backtrace:\n
1277     xbacktrace
1278   end
1281 define xreload
1282   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1283   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1285 document xreload
1286   When starting Emacs a second time in the same gdb session under
1287   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1288   their values.  (The same happens on current (2000) versions of GNU/Linux
1289   with gdb 5.0.)
1290   This function reloads them.
1292 xreload
1294 # Flush display (X only)
1295 define ff
1296   set x_flush (0)
1298 document ff
1299 Flush pending X window display updates to screen.
1300 Works only when an inferior emacs is executing.
1304 define hook-run
1305   xreload
1308 # Call xreload if a new Emacs executable is loaded.
1309 define hookpost-run
1310   xreload
1313 set print pretty on
1314 set print sevenbit-strings
1316 show environment DISPLAY
1317 show environment TERM
1319 # People get bothered when they see messages about non-existent functions...
1320 xgetptr Vsystem_type
1321 # $ptr is NULL in temacs
1322 if ($ptr != 0)
1323   set $tem = (struct Lisp_Symbol *) $ptr
1324   xgetptr $tem->xname
1325   set $tem = (struct Lisp_String *) $ptr
1326   set $tem = (char *) $tem->data
1328   # Don't let abort actually run, as it will make stdio stop working and
1329   # therefore the `pr' command above as well.
1330   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1331     # The windows-nt build replaces abort with its own function.
1332     break w32_abort
1333   else
1334     break abort
1335   end
1338 # x_error_quitter is defined only on X.  But window-system is set up
1339 # only at run time, during Emacs startup, so we need to defer setting
1340 # the breakpoint.  init_sys_modes is the first function called on
1341 # every platform after init_display, where window-system is set.
1342 tbreak init_sys_modes
1343 commands
1344   silent
1345   xgetptr Vinitial_window_system
1346   set $tem = (struct Lisp_Symbol *) $ptr
1347   xgetptr $tem->xname
1348   set $tem = (struct Lisp_String *) $ptr
1349   set $tem = (char *) $tem->data
1350   # If we are running in synchronous mode, we want a chance to look
1351   # around before Emacs exits.  Perhaps we should put the break
1352   # somewhere else instead...
1353   if $tem[0] == 'x' && $tem[1] == '\0'
1354     break x_error_quitter
1355   end
1356   continue