Preserve window-point-insertion-type when copying window-point markers. (Bug#12588)
[emacs.git] / src / .gdbinit
blob952d7392a4c36c0b2c5d92f3e7b542f1ae3ff3f2
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 VALBITS etc.
21 set $dummy = main + 8
22 # With some compilers, we need this to give us struct Lisp_Symbol etc.:
23 set $dummy = Fmake_symbol + 8
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 # Use $bugfix so that the value isn't a constant.
47 # Using a constant runs into GDB bugs sometimes.
48 define xgetptr
49   if (CHECK_LISP_OBJECT_TYPE)
50     set $bugfix = $arg0.i
51   else
52     set $bugfix = $arg0
53   end
54   set $ptr = ($bugfix & VALMASK) | DATA_SEG_BITS
55 end
57 define xgetint
58   if (CHECK_LISP_OBJECT_TYPE)
59     set $bugfix = $arg0.i
60   else
61     set $bugfix = $arg0
62   end
63   set $int = $bugfix << (USE_LSB_TAG ? 0 : INTTYPEBITS) >> INTTYPEBITS
64 end
66 define xgettype
67   if (CHECK_LISP_OBJECT_TYPE)
68     set $bugfix = $arg0.i
69   else
70     set $bugfix = $arg0
71   end
72   set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : $bugfix >> VALBITS)
73 end
75 # Set up something to print out s-expressions.
76 # We save and restore print_output_debug_flag to prevent the w32 port
77 # from calling OutputDebugString, which causes GDB to display each
78 # character twice (yuk!).
79 define pr
80   pp $
81 end
82 document pr
83 Print the emacs s-expression which is $.
84 Works only when an inferior emacs is executing.
85 end
87 # Print out s-expressions
88 define pp
89   set $tmp = $arg0
90   set $output_debug = print_output_debug_flag
91   set print_output_debug_flag = 0
92   call safe_debug_print ($tmp)
93   set print_output_debug_flag = $output_debug
94 end
95 document pp
96 Print the argument as an emacs s-expression
97 Works only when an inferior emacs is executing.
98 end
100 # Print value of lisp variable
101 define pv
102   set $tmp = "$arg0"
103   set $output_debug = print_output_debug_flag
104   set print_output_debug_flag = 0
105   call safe_debug_print (find_symbol_value (intern ($tmp)))
106   set print_output_debug_flag = $output_debug
108 document pv
109 Print the value of the lisp variable given as argument.
110 Works only when an inferior emacs is executing.
113 # Print out current buffer point and boundaries
114 define ppt
115   set $b = current_buffer
116   set $t = $b->text
117   printf "BUF PT: %d", $b->pt
118   if ($b->pt != $b->pt_byte)
119     printf "[%d]", $b->pt_byte
120   end
121   printf " of 1..%d", $t->z
122   if ($t->z != $t->z_byte)
123     printf "[%d]", $t->z_byte
124   end
125   if ($b->begv != 1 || $b->zv != $t->z)
126     printf " NARROW=%d..%d", $b->begv, $b->zv
127     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
128       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
129     end
130   end
131   printf " GAP: %d", $t->gpt
132   if ($t->gpt != $t->gpt_byte)
133     printf "[%d]", $t->gpt_byte
134   end
135   printf " SZ=%d\n", $t->gap_size
137 document ppt
138 Print current buffer's point and boundaries.
139 Prints values of point, beg, end, narrow, and gap for current buffer.
142 define pitmethod
143   set $itmethod = $arg0
144   # output $itmethod
145   if ($itmethod == 0)
146     printf "GET_FROM_BUFFER"
147   end
148   if ($itmethod == 1)
149     printf "GET_FROM_DISPLAY_VECTOR"
150   end
151   if ($itmethod == 2)
152     printf "GET_FROM_STRING"
153   end
154   if ($itmethod == 3)
155     printf "GET_FROM_C_STRING"
156   end
157   if ($itmethod == 4)
158     printf "GET_FROM_IMAGE"
159   end
160   if ($itmethod == 5)
161     printf "GET_FROM_STRETCH"
162   end
163   if ($itmethod < 0 || $itmethod > 5)
164     output $itmethod
165   end
167 document pitmethod
168 Pretty print it->method given as first arg
171 # Print out iterator given as first arg
172 define pitx
173   set $it = $arg0
174   printf "cur=%d", $it->current.pos.charpos
175   if ($it->current.pos.charpos != $it->current.pos.bytepos)
176     printf "[%d]", $it->current.pos.bytepos
177   end
178   printf " pos=%d", $it->position.charpos
179   if ($it->position.charpos != $it->position.bytepos)
180     printf "[%d]", $it->position.bytepos
181   end
182   printf " start=%d", $it->start.pos.charpos
183   if ($it->start.pos.charpos != $it->start.pos.bytepos)
184     printf "[%d]", $it->start.pos.bytepos
185   end
186   printf " end=%d", $it->end_charpos
187   printf " stop=%d", $it->stop_charpos
188   printf " face=%d", $it->face_id
189   if ($it->multibyte_p)
190     printf " MB"
191   end
192   if ($it->header_line_p)
193     printf " HL"
194   end
195   if ($it->n_overlay_strings > 0)
196     printf " nov=%d", $it->n_overlay_strings
197   end
198   if ($it->sp != 0)
199     printf " sp=%d", $it->sp
200   end
201   # IT_CHARACTER
202   if ($it->what == 0)
203     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
204       printf " ch='%c'", $it->c
205     else
206       printf " ch=[%d,%d]", $it->c, $it->len
207     end
208   else
209     printf " "
210     # output $it->what
211     if ($it->what == 0)
212       printf "IT_CHARACTER"
213     end
214     if ($it->what == 1)
215       printf "IT_COMPOSITION"
216     end
217     if ($it->what == 2)
218       printf "IT_IMAGE"
219     end
220     if ($it->what == 3)
221       printf "IT_STRETCH"
222     end
223     if ($it->what == 4)
224       printf "IT_EOB"
225     end
226     if ($it->what == 5)
227       printf "IT_TRUNCATION"
228     end
229     if ($it->what == 6)
230       printf "IT_CONTINUATION"
231     end
232     if ($it->what < 0 || $it->what > 6)
233       output $it->what
234     end
235   end
236   if ($it->method != 0)
237     # !GET_FROM_BUFFER
238     printf " next="
239     pitmethod $it->method
240     if ($it->method == 2)
241       # GET_FROM_STRING
242       printf "[%d]", $it->current.string_pos.charpos
243     end
244     if ($it->method == 4)
245       # GET_FROM_IMAGE
246       printf "[%d]", $it->image_id
247     end
248   end
249   printf "\n"
250   if ($it->bidi_p)
251     printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
252   end
253   if ($it->region_beg_charpos >= 0)
254     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
255   end
256   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
257   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
258   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
259   printf " w=%d", $it->pixel_width
260   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
261   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
262   printf "\n"
263   set $i = 0
264   while ($i < $it->sp && $i < 4)
265     set $e = $it->stack[$i]
266     printf "stack[%d]: ", $i
267     pitmethod $e.method
268     printf "[%d]", $e.position.charpos
269     printf "\n"
270     set $i = $i + 1
271   end
273 document pitx
274 Pretty print a display iterator.
275 Take one arg, an iterator object or pointer.
278 define pit
279   pitx it
281 document pit
282 Pretty print the display iterator it.
285 define prowx
286   set $row = $arg0
287   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
288   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
289   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
290   printf " vis=%d\n", $row->visible_height
291   printf "used=(LMargin=%d,Text=%d,RMargin=%d) Hash=%d\n", $row->used[0], $row->used[1], $row->used[2], $row->hash
292   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
293   if ($row->enabled_p)
294     printf " ENA"
295   end
296   if ($row->displays_text_p)
297     printf " DISP"
298   end
299   if ($row->mode_line_p)
300     printf " MODEL"
301   end
302   if ($row->continued_p)
303     printf " CONT"
304   end
305   if ($row-> truncated_on_left_p)
306     printf " TRUNC:L"
307   end
308   if ($row-> truncated_on_right_p)
309     printf " TRUNC:R"
310   end
311   if ($row->starts_in_middle_of_char_p)
312     printf " STARTMID"
313   end
314   if ($row->ends_in_middle_of_char_p)
315     printf " ENDMID"
316   end
317   if ($row->ends_in_newline_from_string_p)
318     printf " ENDNLFS"
319   end
320   if ($row->ends_at_zv_p)
321     printf " ENDZV"
322   end
323   if ($row->overlapped_p)
324     printf " OLAPD"
325   end
326   if ($row->overlapping_p)
327     printf " OLAPNG"
328   end
329   printf "\n"
331 document prowx
332 Pretty print information about glyph_row.
333 Takes one argument, a row object or pointer.
336 define prow
337   prowx row
339 document prow
340 Pretty print information about glyph_row in row.
344 define pcursorx
345   set $cp = $arg0
346   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
348 document pcursorx
349 Pretty print a window cursor.
352 define pcursor
353   printf "output: "
354   pcursorx output_cursor
355   printf "\n"
357 document pcursor
358 Pretty print the output_cursor.
361 define pwinx
362   set $w = $arg0
363   xgetint $w->sequence_number
364   if ($w->mini_p != Qnil)
365     printf "Mini "
366   end
367   printf "Window %d ", $int
368   xgetptr $w->buffer
369   set $tem = (struct buffer *) $ptr
370   xgetptr $tem->name_
371   printf "%s", ((struct Lisp_String *) $ptr)->data
372   printf "\n"
373   xgetptr $w->start
374   set $tem = (struct Lisp_Marker *) $ptr
375   printf "start=%d end:", $tem->charpos
376   if ($w->window_end_valid != Qnil)
377     xgetint $w->window_end_pos
378     printf "pos=%d", $int
379     xgetint $w->window_end_vpos
380     printf " vpos=%d", $int
381   else
382     printf "invalid"
383   end
384   printf " vscroll=%d", $w->vscroll
385   if ($w->force_start != Qnil)
386     printf " FORCE_START"
387   end
388   if ($w->must_be_updated_p)
389     printf " MUST_UPD"
390   end
391   printf "\n"
392   printf "cursor: "
393   pcursorx $w->cursor
394   printf "  phys: "
395   pcursorx $w->phys_cursor
396   if ($w->phys_cursor_on_p)
397     printf " ON"
398   else
399     printf " OFF"
400   end
401   printf " blk="
402   if ($w->last_cursor_off_p != $w->cursor_off_p)
403     if ($w->last_cursor_off_p)
404       printf "ON->"
405     else
406       printf "OFF->"
407     end
408   end
409   if ($w->cursor_off_p)
410     printf "ON"
411   else
412     printf "OFF"
413   end
414   printf "\n"
416 document pwinx
417 Pretty print a window structure.
418 Takes one argument, a pointer to a window structure.
421 define pwin
422   pwinx w
424 document pwin
425 Pretty print window structure w.
428 define pbiditype
429   if ($arg0 == 0)
430     printf "UNDEF"
431   end
432   if ($arg0 == 1)
433     printf "L"
434   end
435   if ($arg0 == 2)
436     printf "R"
437   end
438   if ($arg0 == 3)
439     printf "EN"
440   end
441   if ($arg0 == 4)
442     printf "AN"
443   end
444   if ($arg0 == 5)
445     printf "BN"
446   end
447   if ($arg0 == 6)
448     printf "B"
449   end
450   if ($arg0 < 0 || $arg0 > 6)
451     printf "%d??", $arg0
452   end
454 document pbiditype
455 Print textual description of bidi type given as first argument.
458 define pgx
459   set $g = $arg0
460   # CHAR_GLYPH
461   if ($g.type == 0)
462     if ($g.u.ch >= ' ' && $g.u.ch < 127)
463       printf "CHAR[%c]", $g.u.ch
464     else
465       printf "CHAR[0x%x]", $g.u.ch
466     end
467   end
468   # COMPOSITE_GLYPH
469   if ($g.type == 1)
470     printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
471   end
472   # GLYPHLESS_GLYPH
473   if ($g.type == 2)
474     printf "GLYPHLESS["
475     if ($g.u.glyphless.method == 0)
476       printf "THIN]"
477     end
478     if ($g.u.glyphless.method == 1)
479       printf "EMPTY]"
480     end
481     if ($g.u.glyphless.method == 2)
482       printf "ACRO]"
483     end
484     if ($g.u.glyphless.method == 3)
485       printf "HEX]"
486     end
487   end
488   # IMAGE_GLYPH
489   if ($g.type == 3)
490     printf "IMAGE[%d]", $g.u.img_id
491   end
492   # STRETCH_GLYPH
493   if ($g.type == 4)
494     printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
495   end
496   xgettype ($g.object)
497   if ($type == Lisp_String)
498     printf " str=%x[%d]", $g.object, $g.charpos
499   else
500     printf " pos=%d", $g.charpos
501   end
502   # For characters, print their resolved level and bidi type
503   if ($g.type == 0)
504     printf " blev=%d,btyp=", $g.resolved_level
505     pbiditype $g.bidi_type
506   end
507   printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
508   # If not DEFAULT_FACE_ID
509   if ($g.face_id != 0)
510     printf " face=%d", $g.face_id
511   end
512   if ($g.voffset)
513     printf " vof=%d", $g.voffset
514   end
515   if ($g.multibyte_p)
516     printf " MB"
517   end
518   if ($g.padding_p)
519     printf " PAD"
520   end
521   if ($g.glyph_not_available_p)
522     printf " N/A"
523   end
524   if ($g.overlaps_vertically_p)
525     printf " OVL"
526   end
527   if ($g.avoid_cursor_p)
528     printf " AVOID"
529   end
530   if ($g.left_box_line_p)
531     printf " ["
532   end
533   if ($g.right_box_line_p)
534     printf " ]"
535   end
536   if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
537     printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
538   end
539   printf "\n"
541 document pgx
542 Pretty print a glyph structure.
543 Takes one argument, a pointer to a glyph structure.
546 define pg
547   set $pgidx = 0
548   pgx glyph
550 document pg
551 Pretty print glyph structure glyph.
554 define pgi
555   set $pgidx = $arg0
556   pgx (&glyph[$pgidx])
558 document pgi
559 Pretty print glyph structure glyph[I].
560 Takes one argument, a integer I.
563 define pgn
564   set $pgidx = $pgidx + 1
565   pgx (&glyph[$pgidx])
567 document pgn
568 Pretty print next glyph structure.
571 define pgrowx
572   set $row = $arg0
573   set $area = 0
574   set $xofs = $row->x
575   while ($area < 3)
576     set $used = $row->used[$area]
577     if ($used > 0)
578       set $gl0 = $row->glyphs[$area]
579       set $pgidx = 0
580       printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
581       while ($pgidx < $used)
582         printf "%3d %4d: ", $pgidx, $xofs
583         pgx $gl0[$pgidx]
584         set $xofs = $xofs + $gl0[$pgidx]->pixel_width
585         set $pgidx = $pgidx + 1
586       end
587     end
588     set $area = $area + 1
589   end
591 document pgrowx
592 Pretty print all glyphs in a row structure.
593 Takes one argument, a pointer to a row structure.
596 define pgrow
597   pgrowx row
599 document pgrow
600 Pretty print all glyphs in row structure row.
603 define pgrowit
604   pgrowx it->glyph_row
606 document pgrowit
607 Pretty print all glyphs in it->glyph_row.
610 define prowlims
611   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
613 document prowlims
614 Print important attributes of a glyph_row structure.
615 Takes one argument, a pointer to a glyph_row structure.
618 define pmtxrows
619   set $mtx = $arg0
620   set $gl = $mtx->rows
621   set $glend = $mtx->rows + $mtx->nrows - 1
622   set $i = 0
623   while ($gl < $glend)
624     printf "%d: ", $i
625     prowlims $gl
626     set $gl = $gl + 1
627     set $i = $i + 1
628   end
630 document pmtxrows
631 Print data about glyph rows in a glyph matrix.
632 Takes one argument, a pointer to a glyph_matrix structure.
635 define xtype
636   xgettype $
637   output $type
638   echo \n
639   if $type == Lisp_Misc
640     xmisctype
641   else
642     if $type == Lisp_Vectorlike
643       xvectype
644     end
645   end
647 document xtype
648 Print the type of $, assuming it is an Emacs Lisp value.
649 If the first type printed is Lisp_Vector or Lisp_Misc,
650 a second line gives the more precise type.
653 define xvectype
654   xgetptr $
655   set $size = ((struct Lisp_Vector *) $ptr)->header.size
656   if ($size & PSEUDOVECTOR_FLAG)
657     output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
658   else
659     output $size & ~ARRAY_MARK_FLAG
660   end
661   echo \n
663 document xvectype
664 Print the size or vector subtype of $.
665 This command assumes that $ is a vector or pseudovector.
668 define xmisctype
669   xgetptr $
670   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
671   echo \n
673 document xmisctype
674 Assume that $ is some misc type and print its specific type.
677 define xint
678   xgetint $
679   print $int
681 document xint
682 Print $ as an Emacs Lisp integer.  This gets the sign right.
685 define xptr
686   xgetptr $
687   print (void *) $ptr
689 document xptr
690 Print the pointer portion of an Emacs Lisp value in $.
693 define xmarker
694   xgetptr $
695   print (struct Lisp_Marker *) $ptr
697 document xmarker
698 Print $ as a marker pointer.
699 This command assumes that $ is an Emacs Lisp marker value.
702 define xoverlay
703   xgetptr $
704   print (struct Lisp_Overlay *) $ptr
706 document xoverlay
707 Print $ as a overlay pointer.
708 This command assumes that $ is an Emacs Lisp overlay value.
711 define xmiscfree
712   xgetptr $
713   print (struct Lisp_Free *) $ptr
715 document xmiscfree
716 Print $ as a misc free-cell pointer.
717 This command assumes that $ is an Emacs Lisp Misc value.
720 define xsymbol
721   set $sym = $
722   xgetptr $sym
723   print (struct Lisp_Symbol *) $ptr
724   xprintsym $sym
725   echo \n
727 document xsymbol
728 Print the name and address of the symbol $.
729 This command assumes that $ is an Emacs Lisp symbol value.
732 define xstring
733   xgetptr $
734   print (struct Lisp_String *) $ptr
735   xprintstr $
736   echo \n
738 document xstring
739 Print the contents and address of the string $.
740 This command assumes that $ is an Emacs Lisp string value.
743 define xvector
744   xgetptr $
745   print (struct Lisp_Vector *) $ptr
746   output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~ARRAY_MARK_FLAG)
747 echo \n
749 document xvector
750 Print the contents and address of the vector $.
751 This command assumes that $ is an Emacs Lisp vector value.
754 define xprocess
755   xgetptr $
756   print (struct Lisp_Process *) $ptr
757   output *$
758   echo \n
760 document xprocess
761 Print the address of the struct Lisp_process to which $ points.
762 This command assumes that $ is a Lisp_Object.
765 define xframe
766   xgetptr $
767   print (struct frame *) $ptr
768   xgetptr $->name
769   set $ptr = (struct Lisp_String *) $ptr
770   xprintstr $ptr
771   echo \n
773 document xframe
774 Print $ as a frame pointer.
775 This command assumes $ is an Emacs Lisp frame value.
778 define xcompiled
779   xgetptr $
780   print (struct Lisp_Vector *) $ptr
781   output ($->contents[0])@($->header.size & 0xff)
783 document xcompiled
784 Print $ as a compiled function pointer.
785 This command assumes that $ is an Emacs Lisp compiled value.
788 define xwindow
789   xgetptr $
790   print (struct window *) $ptr
791   set $window = (struct window *) $ptr
792   xgetint $window->total_cols
793   set $width=$int
794   xgetint $window->total_lines
795   set $height=$int
796   xgetint $window->left_col
797   set $left=$int
798   xgetint $window->top_line
799   set $top=$int
800   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
802 document xwindow
803 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
804 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
807 define xwinconfig
808   xgetptr $
809   print (struct save_window_data *) $ptr
811 document xwinconfig
812 Print $ as a window configuration pointer.
813 This command assumes that $ is an Emacs Lisp window configuration value.
816 define xsubr
817   xgetptr $
818   print (struct Lisp_Subr *) $ptr
819   output *$
820   echo \n
822 document xsubr
823 Print the address of the subr which the Lisp_Object $ points to.
826 define xchartable
827   xgetptr $
828   print (struct Lisp_Char_Table *) $ptr
829   printf "Purpose: "
830   xprintsym $->purpose
831   printf "  %d extra slots", ($->header.size & 0x1ff) - 68
832   echo \n
834 document xchartable
835 Print the address of the char-table $, and its purpose.
836 This command assumes that $ is an Emacs Lisp char-table value.
839 define xsubchartable
840   xgetptr $
841   print (struct Lisp_Sub_Char_Table *) $ptr
842   xgetint $->depth
843   set $depth = $int
844   xgetint $->min_char
845   printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
847 document xsubchartable
848 Print the address of the sub-char-table $, its depth and min-char.
849 This command assumes that $ is an Emacs Lisp sub-char-table value.
852 define xboolvector
853   xgetptr $
854   print (struct Lisp_Bool_Vector *) $ptr
855   output ($->size > 256) ? 0 : ($->data[0])@(($->size + BOOL_VECTOR_BITS_PER_CHAR - 1)/ BOOL_VECTOR_BITS_PER_CHAR)
856   echo \n
858 document xboolvector
859 Print the contents and address of the bool-vector $.
860 This command assumes that $ is an Emacs Lisp bool-vector value.
863 define xbuffer
864   xgetptr $
865   print (struct buffer *) $ptr
866   xgetptr $->name_
867   output ((struct Lisp_String *) $ptr)->data
868   echo \n
870 document xbuffer
871 Set $ as a buffer pointer and the name of the buffer.
872 This command assumes $ is an Emacs Lisp buffer value.
875 define xhashtable
876   xgetptr $
877   print (struct Lisp_Hash_Table *) $ptr
879 document xhashtable
880 Set $ as a hash table pointer.
881 This command assumes that $ is an Emacs Lisp hash table value.
884 define xcons
885   xgetptr $
886   print (struct Lisp_Cons *) $ptr
887   output/x *$
888   echo \n
890 document xcons
891 Print the contents of $ as an Emacs Lisp cons.
894 define nextcons
895   p $.u.cdr
896   xcons
898 document nextcons
899 Print the contents of the next cell in a list.
900 This command assumes that the last thing you printed was a cons cell contents
901 (type struct Lisp_Cons) or a pointer to one.
903 define xcar
904   xgetptr $
905   xgettype $
906   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
908 document xcar
909 Assume that $ is an Emacs Lisp pair and print its car.
912 define xcdr
913   xgetptr $
914   xgettype $
915   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
917 document xcdr
918 Assume that $ is an Emacs Lisp pair and print its cdr.
921 define xlist
922   xgetptr $
923   set $cons = (struct Lisp_Cons *) $ptr
924   xgetptr Qnil
925   set $nil = $ptr
926   set $i = 0
927   while $cons != $nil && $i < 10
928     p/x $cons->car
929     xpr
930     xgetptr $cons->u.cdr
931     set $cons = (struct Lisp_Cons *) $ptr
932     set $i = $i + 1
933     printf "---\n"
934   end
935   if $cons == $nil
936     printf "nil\n"
937   else
938     printf "...\n"
939     p $ptr
940   end
942 document xlist
943 Print $ assuming it is a list.
946 define xfloat
947   xgetptr $
948   print ((struct Lisp_Float *) $ptr)->u.data
950 document xfloat
951 Print $ assuming it is a lisp floating-point number.
954 define xscrollbar
955   xgetptr $
956   print (struct scrollbar *) $ptr
957 output *$
958 echo \n
960 document xscrollbar
961 Print $ as a scrollbar pointer.
964 define xpr
965   xtype
966   if $type == Lisp_Int0 || $type == Lisp_Int1
967     xint
968   end
969   if $type == Lisp_Symbol
970     xsymbol
971   end
972   if $type == Lisp_String
973     xstring
974   end
975   if $type == Lisp_Cons
976     xcons
977   end
978   if $type == Lisp_Float
979     xfloat
980   end
981   if $type == Lisp_Misc
982     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
983     if $misc == Lisp_Misc_Free
984       xmiscfree
985     end
986     if $misc == Lisp_Misc_Marker
987       xmarker
988     end
989     if $misc == Lisp_Misc_Overlay
990       xoverlay
991     end
992 #    if $misc == Lisp_Misc_Save_Value
993 #      xsavevalue
994 #    end
995   end
996   if $type == Lisp_Vectorlike
997     set $size = ((struct Lisp_Vector *) $ptr)->header.size
998     if ($size & PSEUDOVECTOR_FLAG)
999       set $vec = (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
1000       if $vec == PVEC_NORMAL_VECTOR
1001         xvector
1002       end
1003       if $vec == PVEC_PROCESS
1004         xprocess
1005       end
1006       if $vec == PVEC_FRAME
1007         xframe
1008       end
1009       if $vec == PVEC_COMPILED
1010         xcompiled
1011       end
1012       if $vec == PVEC_WINDOW
1013         xwindow
1014       end
1015       if $vec == PVEC_WINDOW_CONFIGURATION
1016         xwinconfig
1017       end
1018       if $vec == PVEC_SUBR
1019         xsubr
1020       end
1021       if $vec == PVEC_CHAR_TABLE
1022         xchartable
1023       end
1024       if $vec == PVEC_BOOL_VECTOR
1025         xboolvector
1026       end
1027       if $vec == PVEC_BUFFER
1028         xbuffer
1029       end
1030       if $vec == PVEC_HASH_TABLE
1031         xhashtable
1032       end
1033     else
1034       xvector
1035     end
1036   end
1038 document xpr
1039 Print $ as a lisp object of any type.
1042 define xprintstr
1043   set $data = (char *) $arg0->data
1044   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
1047 define xprintsym
1048   xgetptr $arg0
1049   set $sym = (struct Lisp_Symbol *) $ptr
1050   xgetptr $sym->name
1051   set $sym_name = (struct Lisp_String *) $ptr
1052   xprintstr $sym_name
1054 document xprintsym
1055   Print argument as a symbol.
1058 define xcoding
1059   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & VALMASK) | DATA_SEG_BITS)
1060   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
1061   set $name = $tmp->contents[$arg0 * 2]
1062   print $name
1063   pr
1064   print $tmp->contents[$arg0 * 2 + 1]
1065   pr
1067 document xcoding
1068   Print the name and attributes of coding system that has ID (argument).
1071 define xcharset
1072   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & VALMASK) | DATA_SEG_BITS)
1073   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
1074   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1075   pr
1077 document xcharset
1078   Print the name of charset that has ID (argument).
1081 define xfontset
1082   xgetptr $
1083   set $tbl = (struct Lisp_Char_Table *) $ptr
1084   print $tbl
1085   xgetint $tbl->extras[0]
1086   printf " ID:%d", $int
1087   xgettype $tbl->extras[1]
1088   xgetptr $tbl->extras[1]
1089   if $type == Lisp_String
1090     set $ptr = (struct Lisp_String *) $ptr
1091     printf " Name:"
1092     xprintstr $ptr
1093   else
1094     xgetptr $tbl->extras[2]
1095     set $ptr = (struct Lisp_Char_Table *) $ptr
1096     xgetptr $ptr->extras[1]
1097     set $ptr = (struct Lisp_String *) $ptr
1098     printf " Realized from:"
1099     xprintstr $ptr
1100   end
1101   echo \n
1104 define xfont
1105   xgetptr $
1106   set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
1107   if $size == FONT_SPEC_MAX
1108     print (struct font_spec *) $ptr
1109   else
1110     if $size == FONT_ENTITY_MAX
1111       print (struct font_entity *) $ptr
1112     else
1113       print (struct font *) $ptr
1114     end
1115   end
1117 document xfont
1118 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1121 define xbacktrace
1122   set $bt = backtrace_list
1123   while $bt
1124     xgettype ($bt->function)
1125     if $type == Lisp_Symbol
1126       xprintsym ($bt->function)
1127       printf " (0x%x)\n", $bt->args
1128     else
1129       xgetptr $bt->function
1130       printf "0x%x ", $ptr
1131       if $type == Lisp_Vectorlike
1132         xgetptr ($bt->function)
1133         set $size = ((struct Lisp_Vector *) $ptr)->header.size
1134         if ($size & PSEUDOVECTOR_FLAG)
1135           output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_SIZE_BITS)
1136         else
1137           output $size & ~ARRAY_MARK_FLAG
1138         end
1139       else
1140         printf "Lisp type %d", $type
1141       end
1142       echo \n
1143     end
1144     set $bt = $bt->next
1145   end
1147 document xbacktrace
1148   Print a backtrace of Lisp function calls from backtrace_list.
1149   Set a breakpoint at Fsignal and call this to see from where
1150   an error was signaled.
1153 define xprintbytestr
1154   set $data = (char *) $arg0->data
1155   printf "Bytecode: "
1156   output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
1158 document xprintbytestr
1159   Print a string of byte code.
1162 define xwhichsymbols
1163   set $output_debug = print_output_debug_flag
1164   set print_output_debug_flag = 0
1165   call safe_debug_print (which_symbols ($arg0, $arg1))
1166   set print_output_debug_flag = $output_debug
1168 document xwhichsymbols
1169   Print symbols which references a given lisp object
1170   either as its symbol value or symbol function.
1171   Call with two arguments: the lisp object and the
1172   maximum number of symbols referencing it to produce.
1175 define xbytecode
1176   set $bt = byte_stack_list
1177   while $bt
1178     xgetptr $bt->byte_string
1179     set $ptr = (struct Lisp_String *) $ptr
1180     xprintbytestr $ptr
1181     printf "\n0x%x => ", $bt->byte_string
1182     xwhichsymbols $bt->byte_string 5
1183     set $bt = $bt->next
1184   end
1186 document xbytecode
1187   Print a backtrace of the byte code stack.
1190 # Show Lisp backtrace after normal backtrace.
1191 define hookpost-backtrace
1192   set $bt = backtrace_list
1193   if $bt
1194     echo \n
1195     echo Lisp Backtrace:\n
1196     xbacktrace
1197   end
1200 # Flush display (X only)
1201 define ff
1202   set x_flush (0)
1204 document ff
1205 Flush pending X window display updates to screen.
1206 Works only when an inferior emacs is executing.
1210 set print pretty on
1211 set print sevenbit-strings
1213 show environment DISPLAY
1214 show environment TERM
1216 # When debugging, it is handy to be able to "return" from
1217 # terminate_due_to_signal when an assertion failure is non-fatal.
1218 break terminate_due_to_signal
1220 # x_error_quitter is defined only on X.  But window-system is set up
1221 # only at run time, during Emacs startup, so we need to defer setting
1222 # the breakpoint.  init_sys_modes is the first function called on
1223 # every platform after init_display, where window-system is set.
1224 tbreak init_sys_modes
1225 commands
1226   silent
1227   xgetptr globals.f_Vinitial_window_system
1228   set $tem = (struct Lisp_Symbol *) $ptr
1229   xgetptr $tem->name
1230   set $tem = (struct Lisp_String *) $ptr
1231   set $tem = (char *) $tem->data
1232   # If we are running in synchronous mode, we want a chance to look
1233   # around before Emacs exits.  Perhaps we should put the break
1234   # somewhere else instead...
1235   if $tem[0] == 'x' && $tem[1] == '\0'
1236     break x_error_quitter
1237   end
1238   continue