lib-src/emacsclient.c (min): Undef before redefining it.
[emacs.git] / src / .gdbinit
blob8f8508f291f3265084f3e18af5683685f14b41cd
1 # Copyright (C) 1992-1998, 2000-2012  Free Software Foundation, Inc.
3 # This file is part of GNU Emacs.
5 # GNU Emacs is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3, or (at your option)
8 # any later version.
10 # GNU Emacs is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with GNU Emacs; see the file COPYING.  If not, write to the
17 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 # Boston, MA 02110-1301, USA.
20 # Force loading of symbols, enough to give us gdb_valbits etc.
21 set main
22 # With some compilers, we need this to give us struct Lisp_Symbol etc.:
23 set Fmake_symbol
25 # Find lwlib source files too.
26 dir ../lwlib
27 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
29 # Don't enter GDB when user types C-g to quit.
30 # This has one unfortunate effect: you can't type C-c
31 # at the GDB to stop Emacs, when using X.
32 # However, C-z works just as well in that case.
33 handle 2 noprint pass
35 # Make it work like SIGINT normally does.
36 handle SIGTSTP nopass
38 # Pass on user signals
39 handle SIGUSR1 noprint pass
40 handle SIGUSR2 noprint pass
42 # Don't pass SIGALRM to Emacs.  This makes problems when
43 # debugging.
44 handle SIGALRM ignore
46 # $valmask and $tagmask are mask values set up by the xreload macro below.
48 # Use $bugfix so that the value isn't a constant.
49 # Using a constant runs into GDB bugs sometimes.
50 define xgetptr
51   set $bugfix = $arg0
52   set $ptr = (gdb_use_union ? (gdb_use_lsb ? $bugfix.u.val << gdb_gctypebits : $bugfix.u.val) : $bugfix & $valmask) | gdb_data_seg_bits
53 end
55 define xgetint
56   set $bugfix = $arg0
57   set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix >> (gdb_gctypebits - 1) : $bugfix << gdb_gctypebits) >> gdb_gctypebits
58 end
60 define xgettype
61   set $bugfix = $arg0
62   set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
63 end
65 # Set up something to print out s-expressions.
66 # We save and restore print_output_debug_flag to prevent the w32 port
67 # from calling OutputDebugString, which causes GDB to display each
68 # character twice (yuk!).
69 define pr
70   pp $
71 end
72 document pr
73 Print the emacs s-expression which is $.
74 Works only when an inferior emacs is executing.
75 end
77 # Print out s-expressions
78 define pp
79   set $tmp = $arg0
80   set $output_debug = print_output_debug_flag
81   set print_output_debug_flag = 0
82   set safe_debug_print ($tmp)
83   set print_output_debug_flag = $output_debug
84 end
85 document pp
86 Print the argument as an emacs s-expression
87 Works only when an inferior emacs is executing.
88 end
90 # Print value of lisp variable
91 define pv
92   set $tmp = "$arg0"
93   set $output_debug = print_output_debug_flag
94   set print_output_debug_flag = 0
95   set safe_debug_print (find_symbol_value (intern ($tmp)))
96   set print_output_debug_flag = $output_debug
97 end
98 document pv
99 Print the value of the lisp variable given as argument.
100 Works only when an inferior emacs is executing.
103 # Print out current buffer point and boundaries
104 define ppt
105   set $b = current_buffer
106   set $t = $b->text
107   printf "BUF PT: %d", $b->pt
108   if ($b->pt != $b->pt_byte)
109     printf "[%d]", $b->pt_byte
110   end
111   printf " of 1..%d", $t->z
112   if ($t->z != $t->z_byte)
113     printf "[%d]", $t->z_byte
114   end
115   if ($b->begv != 1 || $b->zv != $t->z)
116     printf " NARROW=%d..%d", $b->begv, $b->zv
117     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
118       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
119     end
120   end
121   printf " GAP: %d", $t->gpt
122   if ($t->gpt != $t->gpt_byte)
123     printf "[%d]", $t->gpt_byte
124   end
125   printf " SZ=%d\n", $t->gap_size
127 document ppt
128 Print current buffer's point and boundaries.
129 Prints values of point, beg, end, narrow, and gap for current buffer.
132 define pitmethod
133   set $itmethod = $arg0
134   # output $itmethod
135   if ($itmethod == 0)
136     printf "GET_FROM_BUFFER"
137   end
138   if ($itmethod == 1)
139     printf "GET_FROM_DISPLAY_VECTOR"
140   end
141   if ($itmethod == 2)
142     printf "GET_FROM_STRING"
143   end
144   if ($itmethod == 3)
145     printf "GET_FROM_C_STRING"
146   end
147   if ($itmethod == 4)
148     printf "GET_FROM_IMAGE"
149   end
150   if ($itmethod == 5)
151     printf "GET_FROM_STRETCH"
152   end
153   if ($itmethod < 0 || $itmethod > 5)
154     output $itmethod
155   end
157 document pitmethod
158 Pretty print it->method given as first arg
161 # Print out iterator given as first arg
162 define pitx
163   set $it = $arg0
164   printf "cur=%d", $it->current.pos.charpos
165   if ($it->current.pos.charpos != $it->current.pos.bytepos)
166     printf "[%d]", $it->current.pos.bytepos
167   end
168   printf " pos=%d", $it->position.charpos
169   if ($it->position.charpos != $it->position.bytepos)
170     printf "[%d]", $it->position.bytepos
171   end
172   printf " start=%d", $it->start.pos.charpos
173   if ($it->start.pos.charpos != $it->start.pos.bytepos)
174     printf "[%d]", $it->start.pos.bytepos
175   end
176   printf " end=%d", $it->end_charpos
177   printf " stop=%d", $it->stop_charpos
178   printf " face=%d", $it->face_id
179   if ($it->multibyte_p)
180     printf " MB"
181   end
182   if ($it->header_line_p)
183     printf " HL"
184   end
185   if ($it->n_overlay_strings > 0)
186     printf " nov=%d", $it->n_overlay_strings
187   end
188   if ($it->sp != 0)
189     printf " sp=%d", $it->sp
190   end
191   # IT_CHARACTER
192   if ($it->what == 0)
193     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
194       printf " ch='%c'", $it->c
195     else
196       printf " ch=[%d,%d]", $it->c, $it->len
197     end
198   else
199     printf " "
200     # output $it->what
201     if ($it->what == 0)
202       printf "IT_CHARACTER"
203     end
204     if ($it->what == 1)
205       printf "IT_COMPOSITION"
206     end
207     if ($it->what == 2)
208       printf "IT_IMAGE"
209     end
210     if ($it->what == 3)
211       printf "IT_STRETCH"
212     end
213     if ($it->what == 4)
214       printf "IT_EOB"
215     end
216     if ($it->what == 5)
217       printf "IT_TRUNCATION"
218     end
219     if ($it->what == 6)
220       printf "IT_CONTINUATION"
221     end
222     if ($it->what < 0 || $it->what > 6)
223       output $it->what
224     end
225   end
226   if ($it->method != 0)
227     # !GET_FROM_BUFFER
228     printf " next="
229     pitmethod $it->method
230     if ($it->method == 2)
231       # GET_FROM_STRING
232       printf "[%d]", $it->current.string_pos.charpos
233     end
234     if ($it->method == 4)
235       # GET_FROM_IMAGE
236       printf "[%d]", $it->image_id
237     end
238   end
239   printf "\n"
240   if ($it->bidi_p)
241     printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
242   end
243   if ($it->region_beg_charpos >= 0)
244     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
245   end
246   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
247   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
248   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
249   printf " w=%d", $it->pixel_width
250   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
251   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
252   printf "\n"
253   set $i = 0
254   while ($i < $it->sp && $i < 4)
255     set $e = $it->stack[$i]
256     printf "stack[%d]: ", $i
257     pitmethod $e.method
258     printf "[%d]", $e.position.charpos
259     printf "\n"
260     set $i = $i + 1
261   end
263 document pitx
264 Pretty print a display iterator.
265 Take one arg, an iterator object or pointer.
268 define pit
269   pitx it
271 document pit
272 Pretty print the display iterator it.
275 define prowx
276   set $row = $arg0
277   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
278   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
279   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
280   printf " vis=%d\n", $row->visible_height
281   printf "used=(LMargin=%d,Text=%d,RMargin=%d) Hash=%d\n", $row->used[0], $row->used[1], $row->used[2], $row->hash
282   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
283   if ($row->enabled_p)
284     printf " ENA"
285   end
286   if ($row->displays_text_p)
287     printf " DISP"
288   end
289   if ($row->mode_line_p)
290     printf " MODEL"
291   end
292   if ($row->continued_p)
293     printf " CONT"
294   end
295   if ($row-> truncated_on_left_p)
296     printf " TRUNC:L"
297   end
298   if ($row-> truncated_on_right_p)
299     printf " TRUNC:R"
300   end
301   if ($row->starts_in_middle_of_char_p)
302     printf " STARTMID"
303   end
304   if ($row->ends_in_middle_of_char_p)
305     printf " ENDMID"
306   end
307   if ($row->ends_in_newline_from_string_p)
308     printf " ENDNLFS"
309   end
310   if ($row->ends_at_zv_p)
311     printf " ENDZV"
312   end
313   if ($row->overlapped_p)
314     printf " OLAPD"
315   end
316   if ($row->overlapping_p)
317     printf " OLAPNG"
318   end
319   printf "\n"
321 document prowx
322 Pretty print information about glyph_row.
323 Takes one argument, a row object or pointer.
326 define prow
327   prowx row
329 document prow
330 Pretty print information about glyph_row in row.
334 define pcursorx
335   set $cp = $arg0
336   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
338 document pcursorx
339 Pretty print a window cursor.
342 define pcursor
343   printf "output: "
344   pcursorx output_cursor
345   printf "\n"
347 document pcursor
348 Pretty print the output_cursor.
351 define pwinx
352   set $w = $arg0
353   xgetint $w->sequence_number
354   if ($w->mini_p != Qnil)
355     printf "Mini "
356   end
357   printf "Window %d ", $int
358   xgetptr $w->buffer
359   set $tem = (struct buffer *) $ptr
360   xgetptr $tem->name_
361   printf "%s", ((struct Lisp_String *) $ptr)->data
362   printf "\n"
363   xgetptr $w->start
364   set $tem = (struct Lisp_Marker *) $ptr
365   printf "start=%d end:", $tem->charpos
366   if ($w->window_end_valid != Qnil)
367     xgetint $w->window_end_pos
368     printf "pos=%d", $int
369     xgetint $w->window_end_vpos
370     printf " vpos=%d", $int
371   else
372     printf "invalid"
373   end
374   printf " vscroll=%d", $w->vscroll
375   if ($w->force_start != Qnil)
376     printf " FORCE_START"
377   end
378   if ($w->must_be_updated_p)
379     printf " MUST_UPD"
380   end
381   printf "\n"
382   printf "cursor: "
383   pcursorx $w->cursor
384   printf "  phys: "
385   pcursorx $w->phys_cursor
386   if ($w->phys_cursor_on_p)
387     printf " ON"
388   else
389     printf " OFF"
390   end
391   printf " blk="
392   if ($w->last_cursor_off_p != $w->cursor_off_p)
393     if ($w->last_cursor_off_p)
394       printf "ON->"
395     else
396       printf "OFF->"
397     end
398   end
399   if ($w->cursor_off_p)
400     printf "ON"
401   else
402     printf "OFF"
403   end
404   printf "\n"
406 document pwinx
407 Pretty print a window structure.
408 Takes one argument, a pointer to a window structure.
411 define pwin
412   pwinx w
414 document pwin
415 Pretty print window structure w.
418 define pbiditype
419   if ($arg0 == 0)
420     printf "UNDEF"
421   end
422   if ($arg0 == 1)
423     printf "L"
424   end
425   if ($arg0 == 2)
426     printf "R"
427   end
428   if ($arg0 == 3)
429     printf "EN"
430   end
431   if ($arg0 == 4)
432     printf "AN"
433   end
434   if ($arg0 == 5)
435     printf "BN"
436   end
437   if ($arg0 == 6)
438     printf "B"
439   end
440   if ($arg0 < 0 || $arg0 > 6)
441     printf "%d??", $arg0
442   end
444 document pbiditype
445 Print textual description of bidi type given as first argument.
448 define pgx
449   set $g = $arg0
450   # CHAR_GLYPH
451   if ($g.type == 0)
452     if ($g.u.ch >= ' ' && $g.u.ch < 127)
453       printf "CHAR[%c]", $g.u.ch
454     else
455       printf "CHAR[0x%x]", $g.u.ch
456     end
457   end
458   # COMPOSITE_GLYPH
459   if ($g.type == 1)
460     printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
461   end
462   # GLYPHLESS_GLYPH
463   if ($g.type == 2)
464     printf "GLYPHLESS["
465     if ($g.u.glyphless.method == 0)
466       printf "THIN]"
467     end
468     if ($g.u.glyphless.method == 1)
469       printf "EMPTY]"
470     end
471     if ($g.u.glyphless.method == 2)
472       printf "ACRO]"
473     end
474     if ($g.u.glyphless.method == 3)
475       printf "HEX]"
476     end
477   end
478   # IMAGE_GLYPH
479   if ($g.type == 3)
480     printf "IMAGE[%d]", $g.u.img_id
481   end
482   # STRETCH_GLYPH
483   if ($g.type == 4)
484     printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
485   end
486   xgettype ($g.object)
487   if ($type == Lisp_String)
488     printf " str=%x[%d]", $g.object, $g.charpos
489   else
490     printf " pos=%d", $g.charpos
491   end
492   # For characters, print their resolved level and bidi type
493   if ($g.type == 0)
494     printf " blev=%d,btyp=", $g.resolved_level
495     pbiditype $g.bidi_type
496   end
497   printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
498   # If not DEFAULT_FACE_ID
499   if ($g.face_id != 0)
500     printf " face=%d", $g.face_id
501   end
502   if ($g.voffset)
503     printf " vof=%d", $g.voffset
504   end
505   if ($g.multibyte_p)
506     printf " MB"
507   end
508   if ($g.padding_p)
509     printf " PAD"
510   end
511   if ($g.glyph_not_available_p)
512     printf " N/A"
513   end
514   if ($g.overlaps_vertically_p)
515     printf " OVL"
516   end
517   if ($g.avoid_cursor_p)
518     printf " AVOID"
519   end
520   if ($g.left_box_line_p)
521     printf " ["
522   end
523   if ($g.right_box_line_p)
524     printf " ]"
525   end
526   if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
527     printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
528   end
529   printf "\n"
531 document pgx
532 Pretty print a glyph structure.
533 Takes one argument, a pointer to a glyph structure.
536 define pg
537   set $pgidx = 0
538   pgx glyph
540 document pg
541 Pretty print glyph structure glyph.
544 define pgi
545   set $pgidx = $arg0
546   pgx (&glyph[$pgidx])
548 document pgi
549 Pretty print glyph structure glyph[I].
550 Takes one argument, a integer I.
553 define pgn
554   set $pgidx = $pgidx + 1
555   pgx (&glyph[$pgidx])
557 document pgn
558 Pretty print next glyph structure.
561 define pgrowx
562   set $row = $arg0
563   set $area = 0
564   set $xofs = $row->x
565   while ($area < 3)
566     set $used = $row->used[$area]
567     if ($used > 0)
568       set $gl0 = $row->glyphs[$area]
569       set $pgidx = 0
570       printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
571       while ($pgidx < $used)
572         printf "%3d %4d: ", $pgidx, $xofs
573         pgx $gl0[$pgidx]
574         set $xofs = $xofs + $gl0[$pgidx]->pixel_width
575         set $pgidx = $pgidx + 1
576       end
577     end
578     set $area = $area + 1
579   end
581 document pgrowx
582 Pretty print all glyphs in a row structure.
583 Takes one argument, a pointer to a row structure.
586 define pgrow
587   pgrowx row
589 document pgrow
590 Pretty print all glyphs in row structure row.
593 define pgrowit
594   pgrowx it->glyph_row
596 document pgrowit
597 Pretty print all glyphs in it->glyph_row.
600 define prowlims
601   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
603 document prowlims
604 Print important attributes of a glyph_row structure.
605 Takes one argument, a pointer to a glyph_row structure.
608 define pmtxrows
609   set $mtx = $arg0
610   set $gl = $mtx->rows
611   set $glend = $mtx->rows + $mtx->nrows - 1
612   set $i = 0
613   while ($gl < $glend)
614     printf "%d: ", $i
615     prowlims $gl
616     set $gl = $gl + 1
617     set $i = $i + 1
618   end
620 document pmtxrows
621 Print data about glyph rows in a glyph matrix.
622 Takes one argument, a pointer to a glyph_matrix structure.
625 define xtype
626   xgettype $
627   output $type
628   echo \n
629   if $type == Lisp_Misc
630     xmisctype
631   else
632     if $type == Lisp_Vectorlike
633       xvectype
634     end
635   end
637 document xtype
638 Print the type of $, assuming it is an Emacs Lisp value.
639 If the first type printed is Lisp_Vector or Lisp_Misc,
640 a second line gives the more precise type.
643 define xvectype
644   xgetptr $
645   set $size = ((struct Lisp_Vector *) $ptr)->header.size
646   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
647   echo \n
649 document xvectype
650 Print the size or vector subtype of $.
651 This command assumes that $ is a vector or pseudovector.
654 define xmisctype
655   xgetptr $
656   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
657   echo \n
659 document xmisctype
660 Assume that $ is some misc type and print its specific type.
663 define xint
664   xgetint $
665   print $int
667 document xint
668 Print $ as an Emacs Lisp integer.  This gets the sign right.
671 define xptr
672   xgetptr $
673   print (void *) $ptr
675 document xptr
676 Print the pointer portion of an Emacs Lisp value in $.
679 define xmarker
680   xgetptr $
681   print (struct Lisp_Marker *) $ptr
683 document xmarker
684 Print $ as a marker pointer.
685 This command assumes that $ is an Emacs Lisp marker value.
688 define xoverlay
689   xgetptr $
690   print (struct Lisp_Overlay *) $ptr
692 document xoverlay
693 Print $ as a overlay pointer.
694 This command assumes that $ is an Emacs Lisp overlay value.
697 define xmiscfree
698   xgetptr $
699   print (struct Lisp_Free *) $ptr
701 document xmiscfree
702 Print $ as a misc free-cell pointer.
703 This command assumes that $ is an Emacs Lisp Misc value.
706 define xsymbol
707   set $sym = $
708   xgetptr $sym
709   print (struct Lisp_Symbol *) $ptr
710   xprintsym $sym
711   echo \n
713 document xsymbol
714 Print the name and address of the symbol $.
715 This command assumes that $ is an Emacs Lisp symbol value.
718 define xstring
719   xgetptr $
720   print (struct Lisp_String *) $ptr
721   xprintstr $
722   echo \n
724 document xstring
725 Print the contents and address of the string $.
726 This command assumes that $ is an Emacs Lisp string value.
729 define xvector
730   xgetptr $
731   print (struct Lisp_Vector *) $ptr
732   output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~gdb_array_mark_flag)
733 echo \n
735 document xvector
736 Print the contents and address of the vector $.
737 This command assumes that $ is an Emacs Lisp vector value.
740 define xprocess
741   xgetptr $
742   print (struct Lisp_Process *) $ptr
743   output *$
744   echo \n
746 document xprocess
747 Print the address of the struct Lisp_process to which $ points.
748 This command assumes that $ is a Lisp_Object.
751 define xframe
752   xgetptr $
753   print (struct frame *) $ptr
754   xgetptr $->name
755   set $ptr = (struct Lisp_String *) $ptr
756   xprintstr $ptr
757   echo \n
759 document xframe
760 Print $ as a frame pointer.
761 This command assumes $ is an Emacs Lisp frame value.
764 define xcompiled
765   xgetptr $
766   print (struct Lisp_Vector *) $ptr
767   output ($->contents[0])@($->header.size & 0xff)
769 document xcompiled
770 Print $ as a compiled function pointer.
771 This command assumes that $ is an Emacs Lisp compiled value.
774 define xwindow
775   xgetptr $
776   print (struct window *) $ptr
777   set $window = (struct window *) $ptr
778   xgetint $window->total_cols
779   set $width=$int
780   xgetint $window->total_lines
781   set $height=$int
782   xgetint $window->left_col
783   set $left=$int
784   xgetint $window->top_line
785   set $top=$int
786   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
788 document xwindow
789 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
790 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
793 define xwinconfig
794   xgetptr $
795   print (struct save_window_data *) $ptr
797 document xwinconfig
798 Print $ as a window configuration pointer.
799 This command assumes that $ is an Emacs Lisp window configuration value.
802 define xsubr
803   xgetptr $
804   print (struct Lisp_Subr *) $ptr
805   output *$
806   echo \n
808 document xsubr
809 Print the address of the subr which the Lisp_Object $ points to.
812 define xchartable
813   xgetptr $
814   print (struct Lisp_Char_Table *) $ptr
815   printf "Purpose: "
816   xprintsym $->purpose
817   printf "  %d extra slots", ($->header.size & 0x1ff) - 68
818   echo \n
820 document xchartable
821 Print the address of the char-table $, and its purpose.
822 This command assumes that $ is an Emacs Lisp char-table value.
825 define xsubchartable
826   xgetptr $
827   print (struct Lisp_Sub_Char_Table *) $ptr
828   xgetint $->depth
829   set $depth = $int
830   xgetint $->min_char
831   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
833 document xsubchartable
834 Print the address of the sub-char-table $, its depth and min-char.
835 This command assumes that $ is an Emacs Lisp sub-char-table value.
838 define xboolvector
839   xgetptr $
840   print (struct Lisp_Bool_Vector *) $ptr
841   output ($->header.size > 256) ? 0 : ($->data[0])@((($->header.size & ~gdb_array_mark_flag) + 7)/ 8)
842   echo \n
844 document xboolvector
845 Print the contents and address of the bool-vector $.
846 This command assumes that $ is an Emacs Lisp bool-vector value.
849 define xbuffer
850   xgetptr $
851   print (struct buffer *) $ptr
852   xgetptr $->name_
853   output ((struct Lisp_String *) $ptr)->data
854   echo \n
856 document xbuffer
857 Set $ as a buffer pointer and the name of the buffer.
858 This command assumes $ is an Emacs Lisp buffer value.
861 define xhashtable
862   xgetptr $
863   print (struct Lisp_Hash_Table *) $ptr
865 document xhashtable
866 Set $ as a hash table pointer.
867 This command assumes that $ is an Emacs Lisp hash table value.
870 define xcons
871   xgetptr $
872   print (struct Lisp_Cons *) $ptr
873   output/x *$
874   echo \n
876 document xcons
877 Print the contents of $ as an Emacs Lisp cons.
880 define nextcons
881   p $.u.cdr
882   xcons
884 document nextcons
885 Print the contents of the next cell in a list.
886 This command assumes that the last thing you printed was a cons cell contents
887 (type struct Lisp_Cons) or a pointer to one.
889 define xcar
890   xgetptr $
891   xgettype $
892   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
894 document xcar
895 Assume that $ is an Emacs Lisp pair and print its car.
898 define xcdr
899   xgetptr $
900   xgettype $
901   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
903 document xcdr
904 Assume that $ is an Emacs Lisp pair and print its cdr.
907 define xlist
908   xgetptr $
909   set $cons = (struct Lisp_Cons *) $ptr
910   xgetptr Qnil
911   set $nil = $ptr
912   set $i = 0
913   while $cons != $nil && $i < 10
914     p/x $cons->car
915     xpr
916     xgetptr $cons->u.cdr
917     set $cons = (struct Lisp_Cons *) $ptr
918     set $i = $i + 1
919     printf "---\n"
920   end
921   if $cons == $nil
922     printf "nil\n"
923   else
924     printf "...\n"
925     p $ptr
926   end
928 document xlist
929 Print $ assuming it is a list.
932 define xfloat
933   xgetptr $
934   print ((struct Lisp_Float *) $ptr)->u.data
936 document xfloat
937 Print $ assuming it is a lisp floating-point number.
940 define xscrollbar
941   xgetptr $
942   print (struct scrollbar *) $ptr
943 output *$
944 echo \n
946 document xscrollbar
947 Print $ as a scrollbar pointer.
950 define xpr
951   xtype
952   if gdb_use_union
953     if $type == Lisp_Int
954       xint
955     end
956   end
957   if !gdb_use_union
958     if $type == Lisp_Int0 || $type == Lisp_Int1
959       xint
960     end
961   end
962   if $type == Lisp_Symbol
963     xsymbol
964   end
965   if $type == Lisp_String
966     xstring
967   end
968   if $type == Lisp_Cons
969     xcons
970   end
971   if $type == Lisp_Float
972     xfloat
973   end
974   if $type == Lisp_Misc
975     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
976     if $misc == Lisp_Misc_Free
977       xmiscfree
978     end
979     if $misc == Lisp_Misc_Marker
980       xmarker
981     end
982     if $misc == Lisp_Misc_Overlay
983       xoverlay
984     end
985 #    if $misc == Lisp_Misc_Save_Value
986 #      xsavevalue
987 #    end
988   end
989   if $type == Lisp_Vectorlike
990     set $size = ((struct Lisp_Vector *) $ptr)->header.size
991     if ($size & PVEC_FLAG)
992       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
993       if $vec == PVEC_NORMAL_VECTOR
994         xvector
995       end
996       if $vec == PVEC_PROCESS
997         xprocess
998       end
999       if $vec == PVEC_FRAME
1000         xframe
1001       end
1002       if $vec == PVEC_COMPILED
1003         xcompiled
1004       end
1005       if $vec == PVEC_WINDOW
1006         xwindow
1007       end
1008       if $vec == PVEC_WINDOW_CONFIGURATION
1009         xwinconfig
1010       end
1011       if $vec == PVEC_SUBR
1012         xsubr
1013       end
1014       if $vec == PVEC_CHAR_TABLE
1015         xchartable
1016       end
1017       if $vec == PVEC_BOOL_VECTOR
1018         xboolvector
1019       end
1020       if $vec == PVEC_BUFFER
1021         xbuffer
1022       end
1023       if $vec == PVEC_HASH_TABLE
1024         xhashtable
1025       end
1026     else
1027       xvector
1028     end
1029   end
1031 document xpr
1032 Print $ as a lisp object of any type.
1035 define xprintstr
1036   set $data = (char *) $arg0->data
1037   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1040 define xprintsym
1041   xgetptr $arg0
1042   set $sym = (struct Lisp_Symbol *) $ptr
1043   xgetptr $sym->xname
1044   set $sym_name = (struct Lisp_String *) $ptr
1045   xprintstr $sym_name
1047 document xprintsym
1048   Print argument as a symbol.
1051 define xcoding
1052   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1053   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1054   set $name = $tmp->contents[$arg0 * 2]
1055   print $name
1056   pr
1057   print $tmp->contents[$arg0 * 2 + 1]
1058   pr
1060 document xcoding
1061   Print the name and attributes of coding system that has ID (argument).
1064 define xcharset
1065   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1066   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1067   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1068   pr
1070 document xcharset
1071   Print the name of charset that has ID (argument).
1074 define xfontset
1075   xgetptr $
1076   set $tbl = (struct Lisp_Char_Table *) $ptr
1077   print $tbl
1078   xgetint $tbl->extras[0]
1079   printf " ID:%d", $int
1080   xgettype $tbl->extras[1]
1081   xgetptr $tbl->extras[1]
1082   if $type == Lisp_String
1083     set $ptr = (struct Lisp_String *) $ptr
1084     printf " Name:"
1085     xprintstr $ptr
1086   else
1087     xgetptr $tbl->extras[2]
1088     set $ptr = (struct Lisp_Char_Table *) $ptr
1089     xgetptr $ptr->extras[1]
1090     set $ptr = (struct Lisp_String *) $ptr
1091     printf " Realized from:"
1092     xprintstr $ptr
1093   end
1094   echo \n
1097 define xfont
1098   xgetptr $
1099   set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
1100   if $size == FONT_SPEC_MAX
1101     print (struct font_spec *) $ptr
1102   else
1103     if $size == FONT_ENTITY_MAX
1104       print (struct font_entity *) $ptr
1105     else
1106       print (struct font *) $ptr
1107     end
1108   end
1110 document xfont
1111 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1114 define xbacktrace
1115   set $bt = backtrace_list
1116   while $bt
1117     xgettype (*$bt->function)
1118     if $type == Lisp_Symbol
1119       xprintsym (*$bt->function)
1120       printf " (0x%x)\n", $bt->args
1121     else
1122       xgetptr *$bt->function
1123       printf "0x%x ", $ptr
1124       if $type == Lisp_Vectorlike
1125         xgetptr (*$bt->function)
1126         set $size = ((struct Lisp_Vector *) $ptr)->header.size
1127         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1128       else
1129         printf "Lisp type %d", $type
1130       end
1131       echo \n
1132     end
1133     set $bt = $bt->next
1134   end
1136 document xbacktrace
1137   Print a backtrace of Lisp function calls from backtrace_list.
1138   Set a breakpoint at Fsignal and call this to see from where
1139   an error was signaled.
1142 define xprintbytestr
1143   set $data = (char *) $arg0->data
1144   printf "Bytecode: "
1145   output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1147 document xprintbytestr
1148   Print a string of byte code.
1151 define xwhichsymbols
1152   set $output_debug = print_output_debug_flag
1153   set print_output_debug_flag = 0
1154   set safe_debug_print (which_symbols ($arg0, $arg1))
1155   set print_output_debug_flag = $output_debug
1157 document xwhichsymbols
1158   Print symbols which references a given lisp object
1159   either as its symbol value or symbol function.
1160   Call with two arguments: the lisp object and the
1161   maximum number of symbols referencing it to produce.
1164 define xbytecode
1165   set $bt = byte_stack_list
1166   while $bt
1167     xgetptr $bt->byte_string
1168     set $ptr = (struct Lisp_String *) $ptr
1169     xprintbytestr $ptr
1170     printf "\n0x%x => ", $bt->byte_string
1171     xwhichsymbols $bt->byte_string 5
1172     set $bt = $bt->next
1173   end
1175 document xbytecode
1176   Print a backtrace of the byte code stack.
1179 # Show Lisp backtrace after normal backtrace.
1180 define hookpost-backtrace
1181   set $bt = backtrace_list
1182   if $bt
1183     echo \n
1184     echo Lisp Backtrace:\n
1185     xbacktrace
1186   end
1189 define xreload
1190   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1191   # The consing_since_gc business widens the 1 to EMACS_INT,
1192   # a symbol not directly visible to GDB.
1193   set $valmask = gdb_use_lsb ? ~($tagmask) : ((consing_since_gc - consing_since_gc + 1) << gdb_valbits) - 1
1195 document xreload
1196   When starting Emacs a second time in the same gdb session under
1197   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1198   their values.  (The same happens on current (2000) versions of GNU/Linux
1199   with gdb 5.0.)
1200   This function reloads them.
1202 xreload
1204 # Flush display (X only)
1205 define ff
1206   set x_flush (0)
1208 document ff
1209 Flush pending X window display updates to screen.
1210 Works only when an inferior emacs is executing.
1214 define hook-run
1215   xreload
1218 # Call xreload if a new Emacs executable is loaded.
1219 define hookpost-run
1220   xreload
1223 set print pretty on
1224 set print sevenbit-strings
1226 show environment DISPLAY
1227 show environment TERM
1229 # People get bothered when they see messages about non-existent functions...
1230 xgetptr globals.f_Vsystem_type
1231 # $ptr is NULL in temacs
1232 if ($ptr != 0)
1233   set $tem = (struct Lisp_Symbol *) $ptr
1234   xgetptr $tem->xname
1235   set $tem = (struct Lisp_String *) $ptr
1236   set $tem = (char *) $tem->data
1238   # Don't let abort actually run, as it will make stdio stop working and
1239   # therefore the `pr' command above as well.
1240   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1241     # The windows-nt build replaces abort with its own function.
1242     break w32_abort
1243   else
1244     break abort
1245   end
1248 # x_error_quitter is defined only on X.  But window-system is set up
1249 # only at run time, during Emacs startup, so we need to defer setting
1250 # the breakpoint.  init_sys_modes is the first function called on
1251 # every platform after init_display, where window-system is set.
1252 tbreak init_sys_modes
1253 commands
1254   silent
1255   xgetptr globals.f_Vinitial_window_system
1256   set $tem = (struct Lisp_Symbol *) $ptr
1257   xgetptr $tem->xname
1258   set $tem = (struct Lisp_String *) $ptr
1259   set $tem = (char *) $tem->data
1260   # If we are running in synchronous mode, we want a chance to look
1261   # around before Emacs exits.  Perhaps we should put the break
1262   # somewhere else instead...
1263   if $tem[0] == 'x' && $tem[1] == '\0'
1264     break x_error_quitter
1265   end
1266   continue