(vc-git-status-printer): Synchronize with the default.
[emacs.git] / src / .gdbinit
blobfd911b9cbd600babac9549b1eba4da42b70d289f
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 #   2002, 2003, 2004, 2005, 2006, 2007, 2008
3 #   Free Software Foundation, Inc.
5 # This file is part of GNU Emacs.
7 # GNU Emacs is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3, or (at your option)
10 # any later version.
12 # GNU Emacs is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with GNU Emacs; see the file COPYING.  If not, write to the
19 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 # Boston, MA 02110-1301, USA.
22 # Force loading of symbols, enough to give us gdb_valbits etc.
23 set main
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 ? $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   set $output_debug = print_output_debug_flag
71   set print_output_debug_flag = 0
72   set debug_print ($)
73   set print_output_debug_flag = $output_debug
74 end
75 document pr
76 Print the emacs s-expression which is $.
77 Works only when an inferior emacs is executing.
78 end
80 # Print out s-expressions
81 define pp
82   set $tmp = $arg0
83   set $output_debug = print_output_debug_flag
84   set print_output_debug_flag = 0
85   set safe_debug_print ($tmp)
86   set print_output_debug_flag = $output_debug
87 end
88 document pp
89 Print the argument as an emacs s-expression
90 Works only when an inferior emacs is executing.
91 end
93 # Print out s-expressions from tool bar
94 define pp1
95   set $tmp = $arg0
96   set $output_debug = print_output_debug_flag
97   set print_output_debug_flag = 0
98   set safe_debug_print ($tmp)
99   set print_output_debug_flag = $output_debug
101 document pp1
102 Print the argument as an emacs s-expression.
103 Works only when an inferior emacs is executing.
104 For use on tool bar when debugging in Emacs
105 where the variable name would not otherwise
106 be recorded in the GUD buffer.
109 # Print value of lisp variable
110 define pv
111   set $tmp = "$arg0"
112   set $output_debug = print_output_debug_flag
113   set print_output_debug_flag = 0
114   set safe_debug_print ( find_symbol_value (intern ($tmp)))
115   set print_output_debug_flag = $output_debug
117 document pv
118 Print the value of the lisp variable given as argument.
119 Works only when an inferior emacs is executing.
122 # Print value of lisp variable
123 define pv1
124   set $tmp = "$arg0"
125   set $output_debug = print_output_debug_flag
126   set print_output_debug_flag = 0
127   set safe_debug_print (find_symbol_value (intern ($tmp)))
128   set print_output_debug_flag = $output_debug
130 document pv1
131 Print the value of the lisp variable given as argument.
132 Works only when an inferior emacs is executing.
133 For use when debugging in Emacs where the variable
134 name would not otherwise be recorded in the GUD buffer.
137 # Print out current buffer point and boundaries
138 define ppt
139   set $b = current_buffer
140   set $t = $b->text
141   printf "BUF PT: %d", $b->pt
142   if ($b->pt != $b->pt_byte)
143     printf "[%d]", $b->pt_byte
144   end
145   printf " of 1..%d", $t->z
146   if ($t->z != $t->z_byte)
147     printf "[%d]", $t->z_byte
148   end
149   if ($b->begv != 1 || $b->zv != $t->z)
150     printf " NARROW=%d..%d", $b->begv, $b->zv
151     if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
152       printf " [%d..%d]", $b->begv_byte, $b->zv_byte
153     end
154   end
155   printf " GAP: %d", $t->gpt
156   if ($t->gpt != $t->gpt_byte)
157     printf "[%d]", $t->gpt_byte
158   end
159   printf " SZ=%d\n", $t->gap_size
161 document ppt
162 Print current buffer's point and boundaries.
163 Prints values of point, beg, end, narrow, and gap for current buffer.
166 # Print out iterator given as first arg
167 define pitx
168   set $it = $arg0
169   printf "cur=%d", $it->current.pos.charpos
170   if ($it->current.pos.charpos != $it->current.pos.bytepos)
171     printf "[%d]", $it->current.pos.bytepos
172   end
173   printf " pos=%d", $it->position.charpos
174   if ($it->position.charpos != $it->position.bytepos)
175     printf "[%d]", $it->position.bytepos
176   end
177   printf " start=%d", $it->start.pos.charpos
178   if ($it->start.pos.charpos != $it->start.pos.bytepos)
179     printf "[%d]", $it->start.pos.bytepos
180   end
181   printf " end=%d", $it->end_charpos
182   printf " stop=%d", $it->stop_charpos
183   printf " face=%d", $it->face_id
184   if ($it->multibyte_p)
185     printf " MB"
186   end
187   if ($it->header_line_p)
188     printf " HL"
189   end
190   if ($it->n_overlay_strings > 0)
191     printf " nov=%d", $it->n_overlay_strings
192   end
193   if ($it->sp != 0)
194     printf " sp=%d", $it->sp
195   end
196   if ($it->what == IT_CHARACTER)
197     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
198       printf " ch='%c'", $it->c
199     else
200       printf " ch=[%d,%d]", $it->c, $it->len
201     end
202   else
203     printf " "
204     output $it->what
205   end
206   if ($it->method != GET_FROM_BUFFER)
207     printf " next="
208     output $it->method
209     if ($it->method == GET_FROM_STRING)
210       printf "[%d]", $it->current.string_pos.charpos
211     end
212     if ($it->method == GET_FROM_IMAGE)
213       printf "[%d]", $it->image_id
214     end
215     if ($it->method == GET_FROM_COMPOSITION)
216       printf "[%d,%d,%d]", $it->cmp_id, $it->len, $it->cmp_len
217     end
218   end
219   printf "\n"
220   if ($it->region_beg_charpos >= 0)
221     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
222   end
223   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
224   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
225   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
226   printf " w=%d", $it->pixel_width
227   printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
228   printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
229   printf "\n"
230   set $i = 0
231   while ($i < $it->sp && $i < 4)
232     set $e = $it->stack[$i]
233     printf "stack[%d]: ", $i
234     output $e->method
235     printf "[%d]", $e->position.charpos
236     printf "\n"
237     set $i = $i + 1
238   end
240 document pitx
241 Pretty print a display iterator.
242 Take one arg, an iterator object or pointer.
245 define pit
246   pitx it
248 document pit
249 Pretty print the display iterator it.
252 define prowx
253   set $row = $arg0
254   printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
255   printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
256   printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
257   printf " vis=%d", $row->visible_height
258   printf "  L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
259   printf "\n"
260   printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
261   if ($row->enabled_p)
262     printf " ENA"
263   end
264   if ($row->displays_text_p)
265     printf " DISP"
266   end
267   if ($row->mode_line_p)
268     printf " MODEL"
269   end
270   if ($row->continued_p)
271     printf " CONT"
272   end
273   if ($row-> truncated_on_left_p)
274     printf " TRUNC:L"
275   end
276   if ($row-> truncated_on_right_p)
277     printf " TRUNC:R"
278   end
279   if ($row->starts_in_middle_of_char_p)
280     printf " STARTMID"
281   end
282   if ($row->ends_in_middle_of_char_p)
283     printf " ENDMID"
284   end
285   if ($row->ends_in_newline_from_string_p)
286     printf " ENDNLFS"
287   end
288   if ($row->ends_at_zv_p)
289     printf " ENDZV"
290   end
291   if ($row->overlapped_p)
292     printf " OLAPD"
293   end
294   if ($row->overlapping_p)
295     printf " OLAPNG"
296   end
297   printf "\n"
299 document prowx
300 Pretty print information about glyph_row.
301 Takes one argument, a row object or pointer.
304 define prow
305   prowx row
307 document prow
308 Pretty print information about glyph_row in row.
312 define pcursorx
313   set $cp = $arg0
314   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
316 document pcursorx
317 Pretty print a window cursor.
320 define pcursor
321   printf "output: "
322   pcursorx output_cursor
323   printf "\n"
325 document pcursor
326 Pretty print the output_cursor.
329 define pwinx
330   set $w = $arg0
331   xgetint $w->sequence_number
332   if ($w->mini_p != Qnil)
333     printf "Mini "
334   end
335   printf "Window %d ", $int
336   xgetptr $w->buffer
337   set $tem = (struct buffer *) $ptr
338   xgetptr $tem->name
339   printf "%s", ((struct Lisp_String *) $ptr)->data
340   printf "\n"
341   xgetptr $w->start
342   set $tem = (struct Lisp_Marker *) $ptr
343   printf "start=%d end:", $tem->charpos
344   if ($w->window_end_valid != Qnil)
345     xgetint $w->window_end_pos
346     printf "pos=%d", $int
347     xgetint $w->window_end_vpos
348     printf " vpos=%d", $int
349   else
350     printf "invalid"
351   end
352   printf " vscroll=%d", $w->vscroll
353   if ($w->force_start != Qnil)
354     printf " FORCE_START"
355   end
356   if ($w->must_be_updated_p)
357     printf " MUST_UPD"
358   end
359   printf "\n"
360   printf "cursor: "
361   pcursorx $w->cursor
362   printf "  phys: "
363   pcursorx $w->phys_cursor
364   if ($w->phys_cursor_on_p)
365     printf " ON"
366   else
367     printf " OFF"
368   end
369   printf " blk="
370   if ($w->last_cursor_off_p != $w->cursor_off_p)
371     if ($w->last_cursor_off_p)
372       printf "ON->"
373     else
374       printf "OFF->"
375     end
376   end
377   if ($w->cursor_off_p)
378     printf "ON"
379   else
380     printf "OFF"
381   end
382   printf "\n"
384 document pwinx
385 Pretty print a window structure.
386 Takes one argument, a pointer to a window structure.
389 define pwin
390   pwinx w
392 document pwin
393 Pretty print window structure w.
396 define pgx
397   set $g = $arg0
398   if ($g->type == CHAR_GLYPH)
399     if ($g->u.ch >= ' ' && $g->u.ch < 127)
400       printf "CHAR[%c]", $g->u.ch
401     else
402       printf "CHAR[0x%x]", $g->u.ch
403     end
404   end
405   if ($g->type == COMPOSITE_GLYPH)
406     printf "COMP[%d]", $g->u.cmp_id
407   end
408   if ($g->type == IMAGE_GLYPH)
409     printf "IMAGE[%d]", $g->u.img_id
410   end
411   if ($g->type == STRETCH_GLYPH)
412     printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
413   end
414   xgettype ($g->object)
415   if ($type == Lisp_String)
416     printf " str=%x[%d]", $g->object, $g->charpos
417   else
418     printf " pos=%d", $g->charpos
419   end
420   printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
421   if ($g->face_id != DEFAULT_FACE_ID)
422     printf " face=%d", $g->face_id
423   end
424   if ($g->voffset)
425     printf " vof=%d", $g->voffset
426   end
427   if ($g->multibyte_p)
428     printf " MB"
429   end
430   if ($g->padding_p)
431     printf " PAD"
432   end
433   if ($g->glyph_not_available_p)
434     printf " N/A"
435   end
436   if ($g->overlaps_vertically_p)
437     printf " OVL"
438   end
439   if ($g->left_box_line_p)
440     printf " ["
441   end
442   if ($g->right_box_line_p)
443     printf " ]"
444   end
445   if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height)
446     printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height
447   end
448   printf "\n"
450 document pgx
451 Pretty print a glyph structure.
452 Takes one argument, a pointer to a glyph structure.
455 define pg
456   set $pgidx = 0
457   pgx glyph
459 document pg
460 Pretty print glyph structure glyph.
463 define pgi
464   set $pgidx = $arg0
465   pgx (&glyph[$pgidx])
467 document pgi
468 Pretty print glyph structure glyph[I].
469 Takes one argument, a integer I.
472 define pgn
473   set $pgidx = $pgidx + 1
474   pgx (&glyph[$pgidx])
476 document pgn
477 Pretty print next glyph structure.
480 define pgrowx
481   set $row = $arg0
482   set $area = 0
483   set $xofs = $row->x
484   while ($area < 3)
485     set $used = $row->used[$area]
486     if ($used > 0)
487       set $gl0 = $row->glyphs[$area]
488       set $pgidx = 0
489       printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
490       while ($pgidx < $used)
491         printf "%3d %4d: ", $pgidx, $xofs
492         pgx $gl0[$pgidx]
493         set $xofs = $xofs + $gl0[$pgidx]->pixel_width
494         set $pgidx = $pgidx + 1
495       end
496     end
497     set $area = $area + 1
498   end
500 document pgrowx
501 Pretty print all glyphs in a row structure.
502 Takes one argument, a pointer to a row structure.
505 define pgrow
506   pgrowx row
508 document pgrow
509 Pretty print all glyphs in row structure row.
512 define xtype
513   xgettype $
514   output $type
515   echo \n
516   if $type == Lisp_Misc
517     xmisctype
518   else
519     if $type == Lisp_Vectorlike
520       xvectype
521     end
522   end
524 document xtype
525 Print the type of $, assuming it is an Emacs Lisp value.
526 If the first type printed is Lisp_Vector or Lisp_Misc,
527 a second line gives the more precise type.
530 define xvectype
531   xgetptr $
532   set $size = ((struct Lisp_Vector *) $ptr)->size
533   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
534   echo \n
536 document xvectype
537 Print the size or vector subtype of $.
538 This command assumes that $ is a vector or pseudovector.
541 define xmisctype
542   xgetptr $
543   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
544   echo \n
546 document xmisctype
547 Assume that $ is some misc type and print its specific type.
550 define xint
551   xgetint $
552   print $int
554 document xint
555 Print $ as an Emacs Lisp integer.  This gets the sign right.
558 define xptr
559   xgetptr $
560   print (void *) $ptr
562 document xptr
563 Print the pointer portion of an Emacs Lisp value in $.
566 define xmarker
567   xgetptr $
568   print (struct Lisp_Marker *) $ptr
570 document xmarker
571 Print $ as a marker pointer.
572 This command assumes that $ is an Emacs Lisp marker value.
575 define xoverlay
576   xgetptr $
577   print (struct Lisp_Overlay *) $ptr
579 document xoverlay
580 Print $ as a overlay pointer.
581 This command assumes that $ is an Emacs Lisp overlay value.
584 define xmiscfree
585   xgetptr $
586   print (struct Lisp_Free *) $ptr
588 document xmiscfree
589 Print $ as a misc free-cell pointer.
590 This command assumes that $ is an Emacs Lisp Misc value.
593 define xintfwd
594   xgetptr $
595   print (struct Lisp_Intfwd *) $ptr
597 document xintfwd
598 Print $ as an integer forwarding pointer.
599 This command assumes that $ is an Emacs Lisp Misc value.
602 define xboolfwd
603   xgetptr $
604   print (struct Lisp_Boolfwd *) $ptr
606 document xboolfwd
607 Print $ as a boolean forwarding pointer.
608 This command assumes that $ is an Emacs Lisp Misc value.
611 define xobjfwd
612   xgetptr $
613   print (struct Lisp_Objfwd *) $ptr
615 document xobjfwd
616 Print $ as an object forwarding pointer.
617 This command assumes that $ is an Emacs Lisp Misc value.
620 define xbufobjfwd
621   xgetptr $
622   print (struct Lisp_Buffer_Objfwd *) $ptr
624 document xbufobjfwd
625 Print $ as a buffer-local object forwarding pointer.
626 This command assumes that $ is an Emacs Lisp Misc value.
629 define xkbobjfwd
630   xgetptr $
631   print (struct Lisp_Kboard_Objfwd *) $ptr
633 document xkbobjfwd
634 Print $ as a kboard-local object forwarding pointer.
635 This command assumes that $ is an Emacs Lisp Misc value.
638 define xbuflocal
639   xgetptr $
640   print (struct Lisp_Buffer_Local_Value *) $ptr
642 document xbuflocal
643 Print $ as a buffer-local-value pointer.
644 This command assumes that $ is an Emacs Lisp Misc value.
647 define xsymbol
648   set $sym = $
649   xgetptr $sym
650   print (struct Lisp_Symbol *) $ptr
651   xprintsym $sym
652   echo \n
654 document xsymbol
655 Print the name and address of the symbol $.
656 This command assumes that $ is an Emacs Lisp symbol value.
659 define xstring
660   xgetptr $
661   print (struct Lisp_String *) $ptr
662   xprintstr $
663   echo \n
665 document xstring
666 Print the contents and address of the string $.
667 This command assumes that $ is an Emacs Lisp string value.
670 define xvector
671   xgetptr $
672   print (struct Lisp_Vector *) $ptr
673   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
674 echo \n
676 document xvector
677 Print the contents and address of the vector $.
678 This command assumes that $ is an Emacs Lisp vector value.
681 define xprocess
682   xgetptr $
683   print (struct Lisp_Process *) $ptr
684   output *$
685   echo \n
687 document xprocess
688 Print the address of the struct Lisp_process to which $ points.
689 This command assumes that $ is a Lisp_Object.
692 define xframe
693   xgetptr $
694   print (struct frame *) $ptr
695   xgetptr $->name
696   set $ptr = (struct Lisp_String *) $ptr
697   xprintstr $ptr
698   echo \n
700 document xframe
701 Print $ as a frame pointer.
702 This command assumes $ is an Emacs Lisp frame value.
705 define xcompiled
706   xgetptr $
707   print (struct Lisp_Vector *) $ptr
708   output ($->contents[0])@($->size & 0xff)
710 document xcompiled
711 Print $ as a compiled function pointer.
712 This command assumes that $ is an Emacs Lisp compiled value.
715 define xwindow
716   xgetptr $
717   print (struct window *) $ptr
718   set $window = (struct window *) $ptr
719   xgetint $window->total_cols
720   set $width=$int
721   xgetint $window->total_lines
722   set $height=$int
723   xgetint $window->left_col
724   set $left=$int
725   xgetint $window->top_line
726   set $top=$int
727   printf "%dx%d+%d+%d\n", $width, $height, $left, $top
729 document xwindow
730 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
731 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
734 define xwinconfig
735   xgetptr $
736   print (struct save_window_data *) $ptr
738 document xwinconfig
739 Print $ as a window configuration pointer.
740 This command assumes that $ is an Emacs Lisp window configuration value.
743 define xsubr
744   xgetptr $
745   print (struct Lisp_Subr *) $ptr
746   output *$
747   echo \n
749 document xsubr
750 Print the address of the subr which the Lisp_Object $ points to.
753 define xchartable
754   xgetptr $
755   print (struct Lisp_Char_Table *) $ptr
756   printf "Purpose: "
757   xprintsym $->purpose
758   printf "  %d extra slots", ($->size & 0x1ff) - 68
759   echo \n
761 document xchartable
762 Print the address of the char-table $, and its purpose.
763 This command assumes that $ is an Emacs Lisp char-table value.
766 define xboolvector
767   xgetptr $
768   print (struct Lisp_Bool_Vector *) $ptr
769   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
770   echo \n
772 document xboolvector
773 Print the contents and address of the bool-vector $.
774 This command assumes that $ is an Emacs Lisp bool-vector value.
777 define xbuffer
778   xgetptr $
779   print (struct buffer *) $ptr
780   xgetptr $->name
781   output ((struct Lisp_String *) $ptr)->data
782   echo \n
784 document xbuffer
785 Set $ as a buffer pointer and the name of the buffer.
786 This command assumes $ is an Emacs Lisp buffer value.
789 define xhashtable
790   xgetptr $
791   print (struct Lisp_Hash_Table *) $ptr
793 document xhashtable
794 Set $ as a hash table pointer.
795 This command assumes that $ is an Emacs Lisp hash table value.
798 define xcons
799   xgetptr $
800   print (struct Lisp_Cons *) $ptr
801   output/x *$
802   echo \n
804 document xcons
805 Print the contents of $ as an Emacs Lisp cons.
808 define nextcons
809   p $.u.cdr
810   xcons
812 document nextcons
813 Print the contents of the next cell in a list.
814 This command assumes that the last thing you printed was a cons cell contents
815 (type struct Lisp_Cons) or a pointer to one.
817 define xcar
818   xgetptr $
819   xgettype $
820   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
822 document xcar
823 Assume that $ is an Emacs Lisp pair and print its car.
826 define xcdr
827   xgetptr $
828   xgettype $
829   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
831 document xcdr
832 Assume that $ is an Emacs Lisp pair and print its cdr.
835 define xlist
836   xgetptr $
837   set $cons = (struct Lisp_Cons *) $ptr
838   xgetptr Qnil
839   set $nil = $ptr
840   set $i = 0
841   while $cons != $nil && $i < 10
842     p/x $cons->car
843     xpr
844     xgetptr $cons->u.cdr
845     set $cons = (struct Lisp_Cons *) $ptr
846     set $i = $i + 1
847     printf "---\n"
848   end
849   if $cons == $nil
850     printf "nil\n"
851   else
852     printf "...\n"
853     p $ptr
854   end
856 document xlist
857 Print $ assuming it is a list.
860 define xfloat
861   xgetptr $
862   print ((struct Lisp_Float *) $ptr)->u.data
864 document xfloat
865 Print $ assuming it is a lisp floating-point number.
868 define xscrollbar
869   xgetptr $
870   print (struct scrollbar *) $ptr
871 output *$
872 echo \n
874 document xscrollbar
875 Print $ as a scrollbar pointer.
878 define xpr
879   xtype
880   if $type == Lisp_Int
881     xint
882   end
883   if $type == Lisp_Symbol
884     xsymbol
885   end
886   if $type == Lisp_String
887     xstring
888   end
889   if $type == Lisp_Cons
890     xcons
891   end
892   if $type == Lisp_Float
893     xfloat
894   end
895   if $type == Lisp_Misc
896     set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
897     if $misc == Lisp_Misc_Free
898       xmiscfree
899     end
900     if $misc == Lisp_Misc_Boolfwd
901       xboolfwd
902     end
903     if $misc == Lisp_Misc_Marker
904       xmarker
905     end
906     if $misc == Lisp_Misc_Intfwd
907       xintfwd
908     end
909     if $misc == Lisp_Misc_Boolfwd
910       xboolfwd
911     end
912     if $misc == Lisp_Misc_Objfwd
913       xobjfwd
914     end
915     if $misc == Lisp_Misc_Buffer_Objfwd
916       xbufobjfwd
917     end
918     if $misc == Lisp_Misc_Buffer_Local_Value
919       xbuflocal
920     end
921 #    if $misc == Lisp_Misc_Some_Buffer_Local_Value
922 #      xvalue
923 #    end
924     if $misc == Lisp_Misc_Overlay
925       xoverlay
926     end
927     if $misc == Lisp_Misc_Kboard_Objfwd
928       xkbobjfwd
929     end
930 #    if $misc == Lisp_Misc_Save_Value
931 #      xsavevalue
932 #    end
933   end
934   if $type == Lisp_Vectorlike
935     set $size = ((struct Lisp_Vector *) $ptr)->size
936     if ($size & PVEC_FLAG)
937       set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
938       if $vec == PVEC_NORMAL_VECTOR
939         xvector
940       end
941       if $vec == PVEC_PROCESS
942         xprocess
943       end
944       if $vec == PVEC_FRAME
945         xframe
946       end
947       if $vec == PVEC_COMPILED
948         xcompiled
949       end
950       if $vec == PVEC_WINDOW
951         xwindow
952       end
953       if $vec == PVEC_WINDOW_CONFIGURATION
954         xwinconfig
955       end
956       if $vec == PVEC_SUBR
957         xsubr
958       end
959       if $vec == PVEC_CHAR_TABLE
960         xchartable
961       end
962       if $vec == PVEC_BOOL_VECTOR
963         xboolvector
964       end
965       if $vec == PVEC_BUFFER
966         xbuffer
967       end
968       if $vec == PVEC_HASH_TABLE
969         xhashtable
970       end
971     else
972       xvector
973     end
974   end
976 document xpr
977 Print $ as a lisp object of any type.
980 define xprintstr
981   set $data = (char *) $arg0->data
982   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
985 define xprintsym
986   xgetptr $arg0
987   set $sym = (struct Lisp_Symbol *) $ptr
988   xgetptr $sym->xname
989   set $sym_name = (struct Lisp_String *) $ptr
990   xprintstr $sym_name
992 document xprintsym
993   Print argument as a symbol.
996 define xcoding
997   set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
998   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
999   set $name = $tmp->contents[$arg0 * 2]
1000   print $name
1001   pr
1002   print $tmp->contents[$arg0 * 2 + 1]
1003   pr
1005 document xcoding
1006   Print the name and attributes of coding system that has ID (argument).
1009 define xcharset
1010   set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1011   set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1012   p $tmp->contents[$arg0->hash_index * 2]
1013   pr
1015 document xcharset
1016   Print the name of charset that has ID (argument).
1019 define xfontset
1020   xgetptr $
1021   set $tbl = (struct Lisp_Char_Table *) $ptr
1022   print $tbl
1023   xgetint $tbl->extras[0]
1024   printf " ID:%d", $int
1025   xgettype $tbl->extras[1]
1026   xgetptr $tbl->extras[1]
1027   if $type == Lisp_String
1028     set $ptr = (struct Lisp_String *) $ptr
1029     printf " Name:"
1030     xprintstr $ptr
1031   else
1032     xgetptr $tbl->extras[2]
1033     set $ptr = (struct Lisp_Char_Table *) $ptr
1034     xgetptr $ptr->extras[1]
1035     set $ptr = (struct Lisp_String *) $ptr
1036     printf " Realized from:"
1037     xprintstr $ptr
1038   end
1039   echo \n
1042 define xfont
1043   xgetptr $
1044   set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1045   if $size == FONT_SPEC_MAX
1046     print (struct font_spec *) $ptr
1047   else
1048     if $size == FONT_ENTITY_MAX
1049       print (struct font_entity *) $ptr
1050     else
1051       print (struct font *) $ptr
1052     end
1053   end
1055 document xfont
1056 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1059 define xbacktrace
1060   set $bt = backtrace_list
1061   while $bt
1062     xgettype (*$bt->function)
1063     if $type == Lisp_Symbol
1064       xprintsym (*$bt->function)
1065       printf " (0x%x)\n", $bt->args
1066     else
1067       printf "0x%x ", *$bt->function
1068       if $type == Lisp_Vectorlike
1069         xgetptr (*$bt->function)
1070         set $size = ((struct Lisp_Vector *) $ptr)->size
1071         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1072       else
1073         printf "Lisp type %d", $type
1074       end
1075       echo \n
1076     end
1077     set $bt = $bt->next
1078   end
1080 document xbacktrace
1081   Print a backtrace of Lisp function calls from backtrace_list.
1082   Set a breakpoint at Fsignal and call this to see from where
1083   an error was signaled.
1086 define which
1087   set debug_print (which_symbols ($arg0))
1089 document which
1090   Print symbols which references a given lisp object
1091   either as its symbol value or symbol function.
1094 define xbytecode
1095   set $bt = byte_stack_list
1096   while $bt
1097     xgettype ($bt->byte_string)
1098     printf "0x%x => ", $bt->byte_string
1099     which $bt->byte_string
1100     set $bt = $bt->next
1101   end
1103 document xbytecode
1104   Print a backtrace of the byte code stack.
1107 # Show Lisp backtrace after normal backtrace.
1108 define hookpost-backtrace
1109   set $bt = backtrace_list
1110   if $bt
1111     echo \n
1112     echo Lisp Backtrace:\n
1113     xbacktrace
1114   end
1117 define xreload
1118   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1119   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1121 document xreload
1122   When starting Emacs a second time in the same gdb session under
1123   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1124   their values.  (The same happens on current (2000) versions of GNU/Linux
1125   with gdb 5.0.)
1126   This function reloads them.
1128 xreload
1130 # Flush display (X only)
1131 define ff
1132   set x_flush (0)
1134 document ff
1135 Flush pending X window display updates to screen.
1136 Works only when an inferior emacs is executing.
1140 define hook-run
1141   xreload
1144 # Call xreload if a new Emacs executable is loaded.
1145 define hookpost-run
1146   xreload
1149 set print pretty on
1150 set print sevenbit-strings
1152 show environment DISPLAY
1153 show environment TERM
1155 # People get bothered when they see messages about non-existent functions...
1156 xgetptr Vsystem_type
1157 # $ptr is NULL in temacs
1158 if ($ptr != 0)
1159   set $tem = (struct Lisp_Symbol *) $ptr
1160   xgetptr $tem->xname
1161   set $tem = (struct Lisp_String *) $ptr
1162   set $tem = (char *) $tem->data
1164   # Don't let abort actually run, as it will make stdio stop working and
1165   # therefore the `pr' command above as well.
1166   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1167     # The windows-nt build replaces abort with its own function.
1168     break w32_abort
1169   else
1170     break abort
1171   end
1174 # x_error_quitter is defined only on X.  But window-system is set up
1175 # only at run time, during Emacs startup, so we need to defer setting
1176 # the breakpoint.  init_sys_modes is the first function called on
1177 # every platform after init_display, where window-system is set.
1178 tbreak init_sys_modes
1179 commands
1180   silent
1181   xgetptr Vinitial_window_system
1182   set $tem = (struct Lisp_Symbol *) $ptr
1183   xgetptr $tem->xname
1184   set $tem = (struct Lisp_String *) $ptr
1185   set $tem = (char *) $tem->data
1186   # If we are running in synchronous mode, we want a chance to look
1187   # around before Emacs exits.  Perhaps we should put the break
1188   # somewhere else instead...
1189   if $tem[0] == 'x' && $tem[1] == '\0'
1190     break x_error_quitter
1191   end
1192   continue
1194 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe