(FORWARD_SIGNAL_TO_MAIN_THREAD): New define.
[emacs.git] / src / .gdbinit
blobe983e43ca83ee18d3d4448c50c1bfe5c1f1ed63c
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) - 388
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 xbacktrace
997   set $bt = backtrace_list
998   while $bt
999     xgettype (*$bt->function)
1000     if $type == Lisp_Symbol
1001       xprintsym (*$bt->function)
1002       printf " (0x%x)\n", *$bt->args
1003     else
1004       printf "0x%x ", *$bt->function
1005       if $type == Lisp_Vectorlike
1006         xgetptr (*$bt->function)
1007         set $size = ((struct Lisp_Vector *) $ptr)->size
1008         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1009       else
1010         printf "Lisp type %d", $type
1011       end
1012       echo \n
1013     end
1014     set $bt = $bt->next
1015   end
1017 document xbacktrace
1018   Print a backtrace of Lisp function calls from backtrace_list.
1019   Set a breakpoint at Fsignal and call this to see from where
1020   an error was signaled.
1023 define which
1024   set debug_print (which_symbols ($arg0))
1026 document which
1027   Print symbols which references a given lisp object
1028   either as its symbol value or symbol function.
1031 define xbytecode
1032   set $bt = byte_stack_list
1033   while $bt
1034     xgettype ($bt->byte_string)
1035     printf "0x%x => ", $bt->byte_string
1036     which $bt->byte_string
1037     set $bt = $bt->next
1038   end
1040 document xbytecode
1041   Print a backtrace of the byte code stack.
1044 # Show Lisp backtrace after normal backtrace.
1045 define hookpost-backtrace
1046   set $bt = backtrace_list
1047   if $bt
1048     echo \n
1049     echo Lisp Backtrace:\n
1050     xbacktrace
1051   end
1054 define xreload
1055   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1056   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1058 document xreload
1059   When starting Emacs a second time in the same gdb session under
1060   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1061   their values.  (The same happens on current (2000) versions of GNU/Linux
1062   with gdb 5.0.)
1063   This function reloads them.
1065 xreload
1067 # Flush display (X only)
1068 define ff
1069   set x_flush (0)
1071 document ff
1072 Flush pending X window display updates to screen.
1073 Works only when an inferior emacs is executing.
1077 define hook-run
1078   xreload
1081 # Call xreload if a new Emacs executable is loaded.
1082 define hookpost-run
1083   xreload
1086 set print pretty on
1087 set print sevenbit-strings
1089 show environment DISPLAY
1090 show environment TERM
1091 set args -geometry 80x40+0+0
1093 # People get bothered when they see messages about non-existent functions...
1094 xgetptr Vsystem_type
1095 # $ptr is NULL in temacs
1096 if ($ptr != 0)
1097   set $tem = (struct Lisp_Symbol *) $ptr
1098   xgetptr $tem->xname
1099   set $tem = (struct Lisp_String *) $ptr
1100   set $tem = (char *) $tem->data
1102   # Don't let abort actually run, as it will make stdio stop working and
1103   # therefore the `pr' command above as well.
1104   if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1105     # The windows-nt build replaces abort with its own function.
1106     break w32_abort
1107   else
1108     break abort
1109   end
1112 # x_error_quitter is defined only on X.  But window-system is set up
1113 # only at run time, during Emacs startup, so we need to defer setting
1114 # the breakpoint.  init_sys_modes is the first function called on
1115 # every platform after init_display, where window-system is set.
1116 tbreak init_sys_modes
1117 commands
1118   silent
1119   xgetptr Vwindow_system
1120   set $tem = (struct Lisp_Symbol *) $ptr
1121   xgetptr $tem->xname
1122   set $tem = (struct Lisp_String *) $ptr
1123   set $tem = (char *) $tem->data
1124   # If we are running in synchronous mode, we want a chance to look
1125   # around before Emacs exits.  Perhaps we should put the break
1126   # somewhere else instead...
1127   if $tem[0] == 'x' && $tem[1] == '\0'
1128     break x_error_quitter
1129   end
1130   continue
1132 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe