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)
10 # GNU Emacs is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with GNU Emacs; see the file COPYING. If not, write to the
17 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 # Boston, MA 02110-1301, USA.
20 # Force loading of symbols, enough to give us gdb_valbits etc.
22 # With some compilers, we need this to give us struct Lisp_Symbol etc.:
25 # Find lwlib source files too.
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.
35 # Make it work like SIGINT normally does.
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
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.
52 set $ptr = (gdb_use_union ? (gdb_use_lsb ? $bugfix.u.val << gdb_gctypebits : $bugfix.u.val) : $bugfix & $valmask) | gdb_data_seg_bits
57 set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
62 set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
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!).
70 set $output_debug = print_output_debug_flag
71 set print_output_debug_flag = 0
73 set print_output_debug_flag = $output_debug
76 Print the emacs s-expression which is $.
77 Works only when an inferior emacs is executing.
80 # Print out s-expressions
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
89 Print the argument as an emacs s-expression
90 Works only when an inferior emacs is executing.
93 # Print out s-expressions from tool bar
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
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
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
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
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
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
139 set $b = current_buffer
141 printf "BUF PT: %d", $b->pt
142 if ($b->pt != $b->pt_byte)
143 printf "[%d]", $b->pt_byte
145 printf " of 1..%d", $t->z
146 if ($t->z != $t->z_byte)
147 printf "[%d]", $t->z_byte
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
155 printf " GAP: %d", $t->gpt
156 if ($t->gpt != $t->gpt_byte)
157 printf "[%d]", $t->gpt_byte
159 printf " SZ=%d\n", $t->gap_size
162 Print current buffer's point and boundaries.
163 Prints values of point, beg, end, narrow, and gap for current buffer.
167 set $itmethod = $arg0
170 printf "GET_FROM_BUFFER"
173 printf "GET_FROM_DISPLAY_VECTOR"
176 printf "GET_FROM_STRING"
179 printf "GET_FROM_C_STRING"
182 printf "GET_FROM_IMAGE"
185 printf "GET_FROM_STRETCH"
187 if ($itmethod < 0 || $itmethod > 5)
192 Pretty print it->method given as first arg
195 # Print out iterator given as first arg
198 printf "cur=%d", $it->current.pos.charpos
199 if ($it->current.pos.charpos != $it->current.pos.bytepos)
200 printf "[%d]", $it->current.pos.bytepos
202 printf " pos=%d", $it->position.charpos
203 if ($it->position.charpos != $it->position.bytepos)
204 printf "[%d]", $it->position.bytepos
206 printf " start=%d", $it->start.pos.charpos
207 if ($it->start.pos.charpos != $it->start.pos.bytepos)
208 printf "[%d]", $it->start.pos.bytepos
210 printf " end=%d", $it->end_charpos
211 printf " stop=%d", $it->stop_charpos
212 printf " face=%d", $it->face_id
213 if ($it->multibyte_p)
216 if ($it->header_line_p)
219 if ($it->n_overlay_strings > 0)
220 printf " nov=%d", $it->n_overlay_strings
223 printf " sp=%d", $it->sp
227 if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
228 printf " ch='%c'", $it->c
230 printf " ch=[%d,%d]", $it->c, $it->len
236 printf "IT_CHARACTER"
239 printf "IT_COMPOSITION"
251 printf "IT_TRUNCATION"
254 printf "IT_CONTINUATION"
256 if ($it->what < 0 || $it->what > 6)
260 if ($it->method != 0)
263 pitmethod $it->method
264 if ($it->method == 2)
266 printf "[%d]", $it->current.string_pos.charpos
268 if ($it->method == 4)
270 printf "[%d]", $it->image_id
275 printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
277 if ($it->region_beg_charpos >= 0)
278 printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
280 printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
281 printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
282 printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
283 printf " w=%d", $it->pixel_width
284 printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
285 printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
288 while ($i < $it->sp && $i < 4)
289 set $e = $it->stack[$i]
290 printf "stack[%d]: ", $i
292 printf "[%d]", $e->position.charpos
298 Pretty print a display iterator.
299 Take one arg, an iterator object or pointer.
306 Pretty print the display iterator it.
311 printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
312 printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
313 printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
314 printf " vis=%d\n", $row->visible_height
315 printf "used=(LMargin=%d,Text=%d,RMargin=%d) Hash=%d\n", $row->used[0], $row->used[1], $row->used[2], $row->hash
316 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
320 if ($row->displays_text_p)
323 if ($row->mode_line_p)
326 if ($row->continued_p)
329 if ($row-> truncated_on_left_p)
332 if ($row-> truncated_on_right_p)
335 if ($row->starts_in_middle_of_char_p)
338 if ($row->ends_in_middle_of_char_p)
341 if ($row->ends_in_newline_from_string_p)
344 if ($row->ends_at_zv_p)
347 if ($row->overlapped_p)
350 if ($row->overlapping_p)
356 Pretty print information about glyph_row.
357 Takes one argument, a row object or pointer.
364 Pretty print information about glyph_row in row.
370 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
373 Pretty print a window cursor.
378 pcursorx output_cursor
382 Pretty print the output_cursor.
387 xgetint $w->sequence_number
388 if ($w->mini_p != Qnil)
391 printf "Window %d ", $int
393 set $tem = (struct buffer *) $ptr
395 printf "%s", ((struct Lisp_String *) $ptr)->data
398 set $tem = (struct Lisp_Marker *) $ptr
399 printf "start=%d end:", $tem->charpos
400 if ($w->window_end_valid != Qnil)
401 xgetint $w->window_end_pos
402 printf "pos=%d", $int
403 xgetint $w->window_end_vpos
404 printf " vpos=%d", $int
408 printf " vscroll=%d", $w->vscroll
409 if ($w->force_start != Qnil)
410 printf " FORCE_START"
412 if ($w->must_be_updated_p)
419 pcursorx $w->phys_cursor
420 if ($w->phys_cursor_on_p)
426 if ($w->last_cursor_off_p != $w->cursor_off_p)
427 if ($w->last_cursor_off_p)
433 if ($w->cursor_off_p)
441 Pretty print a window structure.
442 Takes one argument, a pointer to a window structure.
449 Pretty print window structure w.
474 if ($arg0 < 0 || $arg0 > 6)
479 Print textual description of bidi type given as first argument.
486 if ($g.u.ch >= ' ' && $g.u.ch < 127)
487 printf "CHAR[%c]", $g.u.ch
489 printf "CHAR[0x%x]", $g.u.ch
494 printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
499 if ($g.u.glyphless.method == 0)
502 if ($g.u.glyphless.method == 1)
505 if ($g.u.glyphless.method == 2)
508 if ($g.u.glyphless.method == 3)
514 printf "IMAGE[%d]", $g.u.img_id
518 printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
521 if ($type == Lisp_String)
522 printf " str=%x[%d]", $g.object, $g.charpos
524 printf " pos=%d", $g.charpos
526 # For characters, print their resolved level and bidi type
528 printf " blev=%d,btyp=", $g.resolved_level
529 pbiditype $g.bidi_type
531 printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
532 # If not DEFAULT_FACE_ID
534 printf " face=%d", $g.face_id
537 printf " vof=%d", $g.voffset
545 if ($g.glyph_not_available_p)
548 if ($g.overlaps_vertically_p)
551 if ($g.avoid_cursor_p)
554 if ($g.left_box_line_p)
557 if ($g.right_box_line_p)
560 if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
561 printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
566 Pretty print a glyph structure.
567 Takes one argument, a pointer to a glyph structure.
575 Pretty print glyph structure glyph.
583 Pretty print glyph structure glyph[I].
584 Takes one argument, a integer I.
588 set $pgidx = $pgidx + 1
592 Pretty print next glyph structure.
600 set $used = $row->used[$area]
602 set $gl0 = $row->glyphs[$area]
604 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
605 while ($pgidx < $used)
606 printf "%3d %4d: ", $pgidx, $xofs
608 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
609 set $pgidx = $pgidx + 1
612 set $area = $area + 1
616 Pretty print all glyphs in a row structure.
617 Takes one argument, a pointer to a row structure.
624 Pretty print all glyphs in row structure row.
631 Pretty print all glyphs in it->glyph_row.
635 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
638 Print important attributes of a glyph_row structure.
639 Takes one argument, a pointer to a glyph_row structure.
645 set $glend = $mtx->rows + $mtx->nrows - 1
655 Print data about glyph rows in a glyph matrix.
656 Takes one argument, a pointer to a glyph_matrix structure.
663 if $type == Lisp_Misc
666 if $type == Lisp_Vectorlike
672 Print the type of $, assuming it is an Emacs Lisp value.
673 If the first type printed is Lisp_Vector or Lisp_Misc,
674 a second line gives the more precise type.
679 set $size = ((struct Lisp_Vector *) $ptr)->header.size
680 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
684 Print the size or vector subtype of $.
685 This command assumes that $ is a vector or pseudovector.
690 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
694 Assume that $ is some misc type and print its specific type.
702 Print $ as an Emacs Lisp integer. This gets the sign right.
710 Print the pointer portion of an Emacs Lisp value in $.
715 print (struct Lisp_Marker *) $ptr
718 Print $ as a marker pointer.
719 This command assumes that $ is an Emacs Lisp marker value.
724 print (struct Lisp_Overlay *) $ptr
727 Print $ as a overlay pointer.
728 This command assumes that $ is an Emacs Lisp overlay value.
733 print (struct Lisp_Free *) $ptr
736 Print $ as a misc free-cell pointer.
737 This command assumes that $ is an Emacs Lisp Misc value.
742 print (struct Lisp_Intfwd *) $ptr
745 Print $ as an integer forwarding pointer.
746 This command assumes that $ is an Emacs Lisp Misc value.
751 print (struct Lisp_Boolfwd *) $ptr
754 Print $ as a boolean forwarding pointer.
755 This command assumes that $ is an Emacs Lisp Misc value.
760 print (struct Lisp_Objfwd *) $ptr
763 Print $ as an object forwarding pointer.
764 This command assumes that $ is an Emacs Lisp Misc value.
769 print (struct Lisp_Buffer_Objfwd *) $ptr
772 Print $ as a buffer-local object forwarding pointer.
773 This command assumes that $ is an Emacs Lisp Misc value.
778 print (struct Lisp_Kboard_Objfwd *) $ptr
781 Print $ as a kboard-local object forwarding pointer.
782 This command assumes that $ is an Emacs Lisp Misc value.
787 print (struct Lisp_Buffer_Local_Value *) $ptr
790 Print $ as a buffer-local-value pointer.
791 This command assumes that $ is an Emacs Lisp Misc value.
797 print (struct Lisp_Symbol *) $ptr
802 Print the name and address of the symbol $.
803 This command assumes that $ is an Emacs Lisp symbol value.
808 print (struct Lisp_String *) $ptr
813 Print the contents and address of the string $.
814 This command assumes that $ is an Emacs Lisp string value.
819 print (struct Lisp_Vector *) $ptr
820 output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~gdb_array_mark_flag)
824 Print the contents and address of the vector $.
825 This command assumes that $ is an Emacs Lisp vector value.
830 print (struct Lisp_Process *) $ptr
835 Print the address of the struct Lisp_process to which $ points.
836 This command assumes that $ is a Lisp_Object.
841 print (struct frame *) $ptr
843 set $ptr = (struct Lisp_String *) $ptr
848 Print $ as a frame pointer.
849 This command assumes $ is an Emacs Lisp frame value.
854 print (struct Lisp_Vector *) $ptr
855 output ($->contents[0])@($->header.size & 0xff)
858 Print $ as a compiled function pointer.
859 This command assumes that $ is an Emacs Lisp compiled value.
864 print (struct window *) $ptr
865 set $window = (struct window *) $ptr
866 xgetint $window->total_cols
868 xgetint $window->total_lines
870 xgetint $window->left_col
872 xgetint $window->top_line
874 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
877 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
878 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
883 print (struct save_window_data *) $ptr
886 Print $ as a window configuration pointer.
887 This command assumes that $ is an Emacs Lisp window configuration value.
892 print (struct Lisp_Subr *) $ptr
897 Print the address of the subr which the Lisp_Object $ points to.
902 print (struct Lisp_Char_Table *) $ptr
905 printf " %d extra slots", ($->header.size & 0x1ff) - 68
909 Print the address of the char-table $, and its purpose.
910 This command assumes that $ is an Emacs Lisp char-table value.
915 print (struct Lisp_Sub_Char_Table *) $ptr
919 printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
921 document xsubchartable
922 Print the address of the sub-char-table $, its depth and min-char.
923 This command assumes that $ is an Emacs Lisp sub-char-table value.
928 print (struct Lisp_Bool_Vector *) $ptr
929 output ($->header.size > 256) ? 0 : ($->data[0])@((($->header.size & ~gdb_array_mark_flag) + 7)/ 8)
933 Print the contents and address of the bool-vector $.
934 This command assumes that $ is an Emacs Lisp bool-vector value.
939 print (struct buffer *) $ptr
941 output ((struct Lisp_String *) $ptr)->data
945 Set $ as a buffer pointer and the name of the buffer.
946 This command assumes $ is an Emacs Lisp buffer value.
951 print (struct Lisp_Hash_Table *) $ptr
954 Set $ as a hash table pointer.
955 This command assumes that $ is an Emacs Lisp hash table value.
960 print (struct Lisp_Cons *) $ptr
965 Print the contents of $ as an Emacs Lisp cons.
973 Print the contents of the next cell in a list.
974 This command assumes that the last thing you printed was a cons cell contents
975 (type struct Lisp_Cons) or a pointer to one.
980 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
983 Assume that $ is an Emacs Lisp pair and print its car.
989 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
992 Assume that $ is an Emacs Lisp pair and print its cdr.
997 set $cons = (struct Lisp_Cons *) $ptr
1001 while $cons != $nil && $i < 10
1004 xgetptr $cons->u.cdr
1005 set $cons = (struct Lisp_Cons *) $ptr
1017 Print $ assuming it is a list.
1022 print ((struct Lisp_Float *) $ptr)->u.data
1025 Print $ assuming it is a lisp floating-point number.
1030 print (struct scrollbar *) $ptr
1035 Print $ as a scrollbar pointer.
1040 if $type == Lisp_Int
1043 if $type == Lisp_Symbol
1046 if $type == Lisp_String
1049 if $type == Lisp_Cons
1052 if $type == Lisp_Float
1055 if $type == Lisp_Misc
1056 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1057 if $misc == Lisp_Misc_Free
1060 if $misc == Lisp_Misc_Boolfwd
1063 if $misc == Lisp_Misc_Marker
1066 if $misc == Lisp_Misc_Intfwd
1069 if $misc == Lisp_Misc_Boolfwd
1072 if $misc == Lisp_Misc_Objfwd
1075 if $misc == Lisp_Misc_Buffer_Objfwd
1078 if $misc == Lisp_Misc_Buffer_Local_Value
1081 # if $misc == Lisp_Misc_Some_Buffer_Local_Value
1084 if $misc == Lisp_Misc_Overlay
1087 if $misc == Lisp_Misc_Kboard_Objfwd
1090 # if $misc == Lisp_Misc_Save_Value
1094 if $type == Lisp_Vectorlike
1095 set $size = ((struct Lisp_Vector *) $ptr)->header.size
1096 if ($size & PVEC_FLAG)
1097 set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1098 if $vec == PVEC_NORMAL_VECTOR
1101 if $vec == PVEC_PROCESS
1104 if $vec == PVEC_FRAME
1107 if $vec == PVEC_COMPILED
1110 if $vec == PVEC_WINDOW
1113 if $vec == PVEC_WINDOW_CONFIGURATION
1116 if $vec == PVEC_SUBR
1119 if $vec == PVEC_CHAR_TABLE
1122 if $vec == PVEC_BOOL_VECTOR
1125 if $vec == PVEC_BUFFER
1128 if $vec == PVEC_HASH_TABLE
1137 Print $ as a lisp object of any type.
1141 set $data = (char *) $arg0->data
1142 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1147 set $sym = (struct Lisp_Symbol *) $ptr
1149 set $sym_name = (struct Lisp_String *) $ptr
1153 Print argument as a symbol.
1157 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1158 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1159 set $name = $tmp->contents[$arg0 * 2]
1162 print $tmp->contents[$arg0 * 2 + 1]
1166 Print the name and attributes of coding system that has ID (argument).
1170 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1171 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1172 p $tmp->contents[charset_table[$arg0].hash_index * 2]
1176 Print the name of charset that has ID (argument).
1181 set $tbl = (struct Lisp_Char_Table *) $ptr
1183 xgetint $tbl->extras[0]
1184 printf " ID:%d", $int
1185 xgettype $tbl->extras[1]
1186 xgetptr $tbl->extras[1]
1187 if $type == Lisp_String
1188 set $ptr = (struct Lisp_String *) $ptr
1192 xgetptr $tbl->extras[2]
1193 set $ptr = (struct Lisp_Char_Table *) $ptr
1194 xgetptr $ptr->extras[1]
1195 set $ptr = (struct Lisp_String *) $ptr
1196 printf " Realized from:"
1204 set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
1205 if $size == FONT_SPEC_MAX
1206 print (struct font_spec *) $ptr
1208 if $size == FONT_ENTITY_MAX
1209 print (struct font_entity *) $ptr
1211 print (struct font *) $ptr
1216 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1220 set $bt = backtrace_list
1222 xgettype (*$bt->function)
1223 if $type == Lisp_Symbol
1224 xprintsym (*$bt->function)
1225 printf " (0x%x)\n", $bt->args
1227 xgetptr *$bt->function
1228 printf "0x%x ", $ptr
1229 if $type == Lisp_Vectorlike
1230 xgetptr (*$bt->function)
1231 set $size = ((struct Lisp_Vector *) $ptr)->header.size
1232 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1234 printf "Lisp type %d", $type
1242 Print a backtrace of Lisp function calls from backtrace_list.
1243 Set a breakpoint at Fsignal and call this to see from where
1244 an error was signaled.
1247 define xprintbytestr
1248 set $data = (char *) $arg0->data
1250 output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1252 document xprintbytestr
1253 Print a string of byte code.
1256 define xwhichsymbols
1257 set $output_debug = print_output_debug_flag
1258 set print_output_debug_flag = 0
1259 set safe_debug_print (which_symbols ($arg0, $arg1))
1260 set print_output_debug_flag = $output_debug
1262 document xwhichsymbols
1263 Print symbols which references a given lisp object
1264 either as its symbol value or symbol function.
1265 Call with two arguments: the lisp object and the
1266 maximum number of symbols referencing it to produce.
1270 set $bt = byte_stack_list
1272 xgetptr $bt->byte_string
1273 set $ptr = (struct Lisp_String *) $ptr
1275 printf "\n0x%x => ", $bt->byte_string
1276 xwhichsymbols $bt->byte_string 5
1281 Print a backtrace of the byte code stack.
1284 # Show Lisp backtrace after normal backtrace.
1285 define hookpost-backtrace
1286 set $bt = backtrace_list
1289 echo Lisp Backtrace:\n
1295 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1296 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1299 When starting Emacs a second time in the same gdb session under
1300 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1301 their values. (The same happens on current (2000) versions of GNU/Linux
1303 This function reloads them.
1307 # Flush display (X only)
1312 Flush pending X window display updates to screen.
1313 Works only when an inferior emacs is executing.
1321 # Call xreload if a new Emacs executable is loaded.
1327 set print sevenbit-strings
1329 show environment DISPLAY
1330 show environment TERM
1332 # People get bothered when they see messages about non-existent functions...
1333 xgetptr globals.f_Vsystem_type
1334 # $ptr is NULL in temacs
1336 set $tem = (struct Lisp_Symbol *) $ptr
1338 set $tem = (struct Lisp_String *) $ptr
1339 set $tem = (char *) $tem->data
1341 # Don't let abort actually run, as it will make stdio stop working and
1342 # therefore the `pr' command above as well.
1343 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1344 # The windows-nt build replaces abort with its own function.
1351 # x_error_quitter is defined only on X. But window-system is set up
1352 # only at run time, during Emacs startup, so we need to defer setting
1353 # the breakpoint. init_sys_modes is the first function called on
1354 # every platform after init_display, where window-system is set.
1355 tbreak init_sys_modes
1358 xgetptr globals.f_Vinitial_window_system
1359 set $tem = (struct Lisp_Symbol *) $ptr
1361 set $tem = (struct Lisp_String *) $ptr
1362 set $tem = (char *) $tem->data
1363 # If we are running in synchronous mode, we want a chance to look
1364 # around before Emacs exits. Perhaps we should put the break
1365 # somewhere else instead...
1366 if $tem[0] == 'x' && $tem[1] == '\0'
1367 break x_error_quitter