* maintaining.texi (Registering, Tag Syntax): Tweak line and page breaks.
[emacs.git] / src / .gdbinit
blob7cd828733b102a853acb038830289b6af8f35205
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 : $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 xintfwd
707   xgetptr $
708   print (struct Lisp_Intfwd *) $ptr
710 document xintfwd
711 Print $ as an integer forwarding pointer.
712 This command assumes that $ is an Emacs Lisp Misc value.
715 define xboolfwd
716   xgetptr $
717   print (struct Lisp_Boolfwd *) $ptr
719 document xboolfwd
720 Print $ as a boolean forwarding pointer.
721 This command assumes that $ is an Emacs Lisp Misc value.
724 define xobjfwd
725   xgetptr $
726   print (struct Lisp_Objfwd *) $ptr
728 document xobjfwd
729 Print $ as an object forwarding pointer.
730 This command assumes that $ is an Emacs Lisp Misc value.
733 define xbufobjfwd
734   xgetptr $
735   print (struct Lisp_Buffer_Objfwd *) $ptr
737 document xbufobjfwd
738 Print $ as a buffer-local object forwarding pointer.
739 This command assumes that $ is an Emacs Lisp Misc value.
742 define xkbobjfwd
743   xgetptr $
744   print (struct Lisp_Kboard_Objfwd *) $ptr
746 document xkbobjfwd
747 Print $ as a kboard-local object forwarding pointer.
748 This command assumes that $ is an Emacs Lisp Misc value.
751 define xbuflocal
752   xgetptr $
753   print (struct Lisp_Buffer_Local_Value *) $ptr
755 document xbuflocal
756 Print $ as a buffer-local-value pointer.
757 This command assumes that $ is an Emacs Lisp Misc value.
760 define xsymbol
761   set $sym = $
762   xgetptr $sym
763   print (struct Lisp_Symbol *) $ptr
764   xprintsym $sym
765   echo \n
767 document xsymbol
768 Print the name and address of the symbol $.
769 This command assumes that $ is an Emacs Lisp symbol value.
772 define xstring
773   xgetptr $
774   print (struct Lisp_String *) $ptr
775   xprintstr $
776   echo \n
778 document xstring
779 Print the contents and address of the string $.
780 This command assumes that $ is an Emacs Lisp string value.
783 define xvector
784   xgetptr $
785   print (struct Lisp_Vector *) $ptr
786   output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~gdb_array_mark_flag)
787 echo \n
789 document xvector
790 Print the contents and address of the vector $.
791 This command assumes that $ is an Emacs Lisp vector value.
794 define xprocess
795   xgetptr $
796   print (struct Lisp_Process *) $ptr
797   output *$
798   echo \n
800 document xprocess
801 Print the address of the struct Lisp_process to which $ points.
802 This command assumes that $ is a Lisp_Object.
805 define xframe
806   xgetptr $
807   print (struct frame *) $ptr
808   xgetptr $->name
809   set $ptr = (struct Lisp_String *) $ptr
810   xprintstr $ptr
811   echo \n
813 document xframe
814 Print $ as a frame pointer.
815 This command assumes $ is an Emacs Lisp frame value.
818 define xcompiled
819   xgetptr $
820   print (struct Lisp_Vector *) $ptr
821   output ($->contents[0])@($->header.size & 0xff)
823 document xcompiled
824 Print $ as a compiled function pointer.
825 This command assumes that $ is an Emacs Lisp compiled value.
828 define xwindow
829   xgetptr $
830   print (struct window *) $ptr
831   set $window = (struct window *) $ptr
832   xgetint $window->total_cols
833   set $width=$int
834   xgetint $window->total_lines
835   set $height=$int
836   xgetint $window->left_col
837   set $left=$int
838   xgetint $window->top_line
839   set $top=$int
840   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
842 document xwindow
843 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
844 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
847 define xwinconfig
848   xgetptr $
849   print (struct save_window_data *) $ptr
851 document xwinconfig
852 Print $ as a window configuration pointer.
853 This command assumes that $ is an Emacs Lisp window configuration value.
856 define xsubr
857   xgetptr $
858   print (struct Lisp_Subr *) $ptr
859   output *$
860   echo \n
862 document xsubr
863 Print the address of the subr which the Lisp_Object $ points to.
866 define xchartable
867   xgetptr $
868   print (struct Lisp_Char_Table *) $ptr
869   printf "Purpose: "
870   xprintsym $->purpose
871   printf "  %d extra slots", ($->header.size & 0x1ff) - 68
872   echo \n
874 document xchartable
875 Print the address of the char-table $, and its purpose.
876 This command assumes that $ is an Emacs Lisp char-table value.
879 define xsubchartable
880   xgetptr $
881   print (struct Lisp_Sub_Char_Table *) $ptr
882   xgetint $->depth
883   set $depth = $int
884   xgetint $->min_char
885   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
887 document xsubchartable
888 Print the address of the sub-char-table $, its depth and min-char.
889 This command assumes that $ is an Emacs Lisp sub-char-table value.
892 define xboolvector
893   xgetptr $
894   print (struct Lisp_Bool_Vector *) $ptr
895   output ($->header.size > 256) ? 0 : ($->data[0])@((($->header.size & ~gdb_array_mark_flag) + 7)/ 8)
896   echo \n
898 document xboolvector
899 Print the contents and address of the bool-vector $.
900 This command assumes that $ is an Emacs Lisp bool-vector value.
903 define xbuffer
904   xgetptr $
905   print (struct buffer *) $ptr
906   xgetptr $->name_
907   output ((struct Lisp_String *) $ptr)->data
908   echo \n
910 document xbuffer
911 Set $ as a buffer pointer and the name of the buffer.
912 This command assumes $ is an Emacs Lisp buffer value.
915 define xhashtable
916   xgetptr $
917   print (struct Lisp_Hash_Table *) $ptr
919 document xhashtable
920 Set $ as a hash table pointer.
921 This command assumes that $ is an Emacs Lisp hash table value.
924 define xcons
925   xgetptr $
926   print (struct Lisp_Cons *) $ptr
927   output/x *$
928   echo \n
930 document xcons
931 Print the contents of $ as an Emacs Lisp cons.
934 define nextcons
935   p $.u.cdr
936   xcons
938 document nextcons
939 Print the contents of the next cell in a list.
940 This command assumes that the last thing you printed was a cons cell contents
941 (type struct Lisp_Cons) or a pointer to one.
943 define xcar
944   xgetptr $
945   xgettype $
946   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
948 document xcar
949 Assume that $ is an Emacs Lisp pair and print its car.
952 define xcdr
953   xgetptr $
954   xgettype $
955   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
957 document xcdr
958 Assume that $ is an Emacs Lisp pair and print its cdr.
961 define xlist
962   xgetptr $
963   set $cons = (struct Lisp_Cons *) $ptr
964   xgetptr Qnil
965   set $nil = $ptr
966   set $i = 0
967   while $cons != $nil && $i < 10
968     p/x $cons->car
969     xpr
970     xgetptr $cons->u.cdr
971     set $cons = (struct Lisp_Cons *) $ptr
972     set $i = $i + 1
973     printf "---\n"
974   end
975   if $cons == $nil
976     printf "nil\n"
977   else
978     printf "...\n"
979     p $ptr
980   end
982 document xlist
983 Print $ assuming it is a list.
986 define xfloat
987   xgetptr $
988   print ((struct Lisp_Float *) $ptr)->u.data
990 document xfloat
991 Print $ assuming it is a lisp floating-point number.
994 define xscrollbar
995   xgetptr $
996   print (struct scrollbar *) $ptr
997 output *$
998 echo \n
1000 document xscrollbar
1001 Print $ as a scrollbar pointer.
1004 define xpr
1005   xtype
1006   if $type == Lisp_Int
1007     xint
1008   end
1009   if $type == Lisp_Symbol
1010     xsymbol
1011   end
1012   if $type == Lisp_String
1013     xstring
1014   end
1015   if $type == Lisp_Cons
1016     xcons
1017   end
1018   if $type == Lisp_Float
1019     xfloat
1020   end
1021   if $type == Lisp_Misc
1022     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1023     if $misc == Lisp_Misc_Free
1024       xmiscfree
1025     end
1026     if $misc == Lisp_Misc_Boolfwd
1027       xboolfwd
1028     end
1029     if $misc == Lisp_Misc_Marker
1030       xmarker
1031     end
1032     if $misc == Lisp_Misc_Intfwd
1033       xintfwd
1034     end
1035     if $misc == Lisp_Misc_Boolfwd
1036       xboolfwd
1037     end
1038     if $misc == Lisp_Misc_Objfwd
1039       xobjfwd
1040     end
1041     if $misc == Lisp_Misc_Buffer_Objfwd
1042       xbufobjfwd
1043     end
1044     if $misc == Lisp_Misc_Buffer_Local_Value
1045       xbuflocal
1046     end
1047 #    if $misc == Lisp_Misc_Some_Buffer_Local_Value
1048 #      xvalue
1049 #    end
1050     if $misc == Lisp_Misc_Overlay
1051       xoverlay
1052     end
1053     if $misc == Lisp_Misc_Kboard_Objfwd
1054       xkbobjfwd
1055     end
1056 #    if $misc == Lisp_Misc_Save_Value
1057 #      xsavevalue
1058 #    end
1059   end
1060   if $type == Lisp_Vectorlike
1061     set $size = ((struct Lisp_Vector *) $ptr)->header.size
1062     if ($size & PVEC_FLAG)
1063       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1064       if $vec == PVEC_NORMAL_VECTOR
1065         xvector
1066       end
1067       if $vec == PVEC_PROCESS
1068         xprocess
1069       end
1070       if $vec == PVEC_FRAME
1071         xframe
1072       end
1073       if $vec == PVEC_COMPILED
1074         xcompiled
1075       end
1076       if $vec == PVEC_WINDOW
1077         xwindow
1078       end
1079       if $vec == PVEC_WINDOW_CONFIGURATION
1080         xwinconfig
1081       end
1082       if $vec == PVEC_SUBR
1083         xsubr
1084       end
1085       if $vec == PVEC_CHAR_TABLE
1086         xchartable
1087       end
1088       if $vec == PVEC_BOOL_VECTOR
1089         xboolvector
1090       end
1091       if $vec == PVEC_BUFFER
1092         xbuffer
1093       end
1094       if $vec == PVEC_HASH_TABLE
1095         xhashtable
1096       end
1097     else
1098       xvector
1099     end
1100   end
1102 document xpr
1103 Print $ as a lisp object of any type.
1106 define xprintstr
1107   set $data = (char *) $arg0->data
1108   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1111 define xprintsym
1112   xgetptr $arg0
1113   set $sym = (struct Lisp_Symbol *) $ptr
1114   xgetptr $sym->xname
1115   set $sym_name = (struct Lisp_String *) $ptr
1116   xprintstr $sym_name
1118 document xprintsym
1119   Print argument as a symbol.
1122 define xcoding
1123   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1124   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1125   set $name = $tmp->contents[$arg0 * 2]
1126   print $name
1127   pr
1128   print $tmp->contents[$arg0 * 2 + 1]
1129   pr
1131 document xcoding
1132   Print the name and attributes of coding system that has ID (argument).
1135 define xcharset
1136   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1137   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1138   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1139   pr
1141 document xcharset
1142   Print the name of charset that has ID (argument).
1145 define xfontset
1146   xgetptr $
1147   set $tbl = (struct Lisp_Char_Table *) $ptr
1148   print $tbl
1149   xgetint $tbl->extras[0]
1150   printf " ID:%d", $int
1151   xgettype $tbl->extras[1]
1152   xgetptr $tbl->extras[1]
1153   if $type == Lisp_String
1154     set $ptr = (struct Lisp_String *) $ptr
1155     printf " Name:"
1156     xprintstr $ptr
1157   else
1158     xgetptr $tbl->extras[2]
1159     set $ptr = (struct Lisp_Char_Table *) $ptr
1160     xgetptr $ptr->extras[1]
1161     set $ptr = (struct Lisp_String *) $ptr
1162     printf " Realized from:"
1163     xprintstr $ptr
1164   end
1165   echo \n
1168 define xfont
1169   xgetptr $
1170   set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
1171   if $size == FONT_SPEC_MAX
1172     print (struct font_spec *) $ptr
1173   else
1174     if $size == FONT_ENTITY_MAX
1175       print (struct font_entity *) $ptr
1176     else
1177       print (struct font *) $ptr
1178     end
1179   end
1181 document xfont
1182 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1185 define xbacktrace
1186   set $bt = backtrace_list
1187   while $bt
1188     xgettype (*$bt->function)
1189     if $type == Lisp_Symbol
1190       xprintsym (*$bt->function)
1191       printf " (0x%x)\n", $bt->args
1192     else
1193       xgetptr *$bt->function
1194       printf "0x%x ", $ptr
1195       if $type == Lisp_Vectorlike
1196         xgetptr (*$bt->function)
1197         set $size = ((struct Lisp_Vector *) $ptr)->header.size
1198         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1199       else
1200         printf "Lisp type %d", $type
1201       end
1202       echo \n
1203     end
1204     set $bt = $bt->next
1205   end
1207 document xbacktrace
1208   Print a backtrace of Lisp function calls from backtrace_list.
1209   Set a breakpoint at Fsignal and call this to see from where
1210   an error was signaled.
1213 define xprintbytestr
1214   set $data = (char *) $arg0->data
1215   printf "Bytecode: "
1216   output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1218 document xprintbytestr
1219   Print a string of byte code.
1222 define xwhichsymbols
1223   set $output_debug = print_output_debug_flag
1224   set print_output_debug_flag = 0
1225   set safe_debug_print (which_symbols ($arg0, $arg1))
1226   set print_output_debug_flag = $output_debug
1228 document xwhichsymbols
1229   Print symbols which references a given lisp object
1230   either as its symbol value or symbol function.
1231   Call with two arguments: the lisp object and the
1232   maximum number of symbols referencing it to produce.
1235 define xbytecode
1236   set $bt = byte_stack_list
1237   while $bt
1238     xgetptr $bt->byte_string
1239     set $ptr = (struct Lisp_String *) $ptr
1240     xprintbytestr $ptr
1241     printf "\n0x%x => ", $bt->byte_string
1242     xwhichsymbols $bt->byte_string 5
1243     set $bt = $bt->next
1244   end
1246 document xbytecode
1247   Print a backtrace of the byte code stack.
1250 # Show Lisp backtrace after normal backtrace.
1251 define hookpost-backtrace
1252   set $bt = backtrace_list
1253   if $bt
1254     echo \n
1255     echo Lisp Backtrace:\n
1256     xbacktrace
1257   end
1260 define xreload
1261   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1262   # The consing_since_gc business widens the 1 to EMACS_INT,
1263   # a symbol not directly visible to GDB.
1264   set $valmask = gdb_use_lsb ? ~($tagmask) : ((consing_since_gc - consing_since_gc + 1) << gdb_valbits) - 1
1266 document xreload
1267   When starting Emacs a second time in the same gdb session under
1268   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1269   their values.  (The same happens on current (2000) versions of GNU/Linux
1270   with gdb 5.0.)
1271   This function reloads them.
1273 xreload
1275 # Flush display (X only)
1276 define ff
1277   set x_flush (0)
1279 document ff
1280 Flush pending X window display updates to screen.
1281 Works only when an inferior emacs is executing.
1285 define hook-run
1286   xreload
1289 # Call xreload if a new Emacs executable is loaded.
1290 define hookpost-run
1291   xreload
1294 set print pretty on
1295 set print sevenbit-strings
1297 show environment DISPLAY
1298 show environment TERM
1300 # People get bothered when they see messages about non-existent functions...
1301 xgetptr globals.f_Vsystem_type
1302 # $ptr is NULL in temacs
1303 if ($ptr != 0)
1304   set $tem = (struct Lisp_Symbol *) $ptr
1305   xgetptr $tem->xname
1306   set $tem = (struct Lisp_String *) $ptr
1307   set $tem = (char *) $tem->data
1309   # Don't let abort actually run, as it will make stdio stop working and
1310   # therefore the `pr' command above as well.
1311   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1312     # The windows-nt build replaces abort with its own function.
1313     break w32_abort
1314   else
1315     break abort
1316   end
1319 # x_error_quitter is defined only on X.  But window-system is set up
1320 # only at run time, during Emacs startup, so we need to defer setting
1321 # the breakpoint.  init_sys_modes is the first function called on
1322 # every platform after init_display, where window-system is set.
1323 tbreak init_sys_modes
1324 commands
1325   silent
1326   xgetptr globals.f_Vinitial_window_system
1327   set $tem = (struct Lisp_Symbol *) $ptr
1328   xgetptr $tem->xname
1329   set $tem = (struct Lisp_String *) $ptr
1330   set $tem = (char *) $tem->data
1331   # If we are running in synchronous mode, we want a chance to look
1332   # around before Emacs exits.  Perhaps we should put the break
1333   # somewhere else instead...
1334   if $tem[0] == 'x' && $tem[1] == '\0'
1335     break x_error_quitter
1336   end
1337   continue