]> code.delx.au - gnu-emacs/blob - src/.gdbinit
Merge from emacs--devo--0
[gnu-emacs] / src / .gdbinit
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.
4 #
5 # This file is part of GNU Emacs.
6 #
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.
11 #
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.
16 #
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.
21
22 # Force loading of symbols, enough to give us gdb_valbits etc.
23 set main
24
25 # Find lwlib source files too.
26 dir ../lwlib
27 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
28
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
34
35 # Make it work like SIGINT normally does.
36 handle SIGTSTP nopass
37
38 # Pass on user signals
39 handle SIGUSR1 noprint pass
40 handle SIGUSR2 noprint pass
41
42 # Don't pass SIGALRM to Emacs. This makes problems when
43 # debugging.
44 handle SIGALRM ignore
45
46 # $valmask and $tagmask are mask values set up by the xreload macro below.
47
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
54
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
59
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
64
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
79
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
92
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
100 end
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.
107 end
108
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
116 end
117 document pv
118 Print the value of the lisp variable given as argument.
119 Works only when an inferior emacs is executing.
120 end
121
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
129 end
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.
135 end
136
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
160 end
161 document ppt
162 Print current buffer's point and boundaries.
163 Prints values of point, beg, end, narrow, and gap for current buffer.
164 end
165
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
239 end
240 document pitx
241 Pretty print a display iterator.
242 Take one arg, an iterator object or pointer.
243 end
244
245 define pit
246 pitx it
247 end
248 document pit
249 Pretty print the display iterator it.
250 end
251
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"
298 end
299 document prowx
300 Pretty print information about glyph_row.
301 Takes one argument, a row object or pointer.
302 end
303
304 define prow
305 prowx row
306 end
307 document prow
308 Pretty print information about glyph_row in row.
309 end
310
311
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
315 end
316 document pcursorx
317 Pretty print a window cursor.
318 end
319
320 define pcursor
321 printf "output: "
322 pcursorx output_cursor
323 printf "\n"
324 end
325 document pcursor
326 Pretty print the output_cursor.
327 end
328
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"
383 end
384 document pwinx
385 Pretty print a window structure.
386 Takes one argument, a pointer to a window structure.
387 end
388
389 define pwin
390 pwinx w
391 end
392 document pwin
393 Pretty print window structure w.
394 end
395
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"
449 end
450 document pgx
451 Pretty print a glyph structure.
452 Takes one argument, a pointer to a glyph structure.
453 end
454
455 define pg
456 set $pgidx = 0
457 pgx glyph
458 end
459 document pg
460 Pretty print glyph structure glyph.
461 end
462
463 define pgi
464 set $pgidx = $arg0
465 pgx (&glyph[$pgidx])
466 end
467 document pgi
468 Pretty print glyph structure glyph[I].
469 Takes one argument, a integer I.
470 end
471
472 define pgn
473 set $pgidx = $pgidx + 1
474 pgx (&glyph[$pgidx])
475 end
476 document pgn
477 Pretty print next glyph structure.
478 end
479
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
499 end
500 document pgrowx
501 Pretty print all glyphs in a row structure.
502 Takes one argument, a pointer to a row structure.
503 end
504
505 define pgrow
506 pgrowx row
507 end
508 document pgrow
509 Pretty print all glyphs in row structure row.
510 end
511
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
523 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.
528 end
529
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
535 end
536 document xvectype
537 Print the size or vector subtype of $.
538 This command assumes that $ is a vector or pseudovector.
539 end
540
541 define xmisctype
542 xgetptr $
543 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
544 echo \n
545 end
546 document xmisctype
547 Assume that $ is some misc type and print its specific type.
548 end
549
550 define xint
551 xgetint $
552 print $int
553 end
554 document xint
555 Print $ as an Emacs Lisp integer. This gets the sign right.
556 end
557
558 define xptr
559 xgetptr $
560 print (void *) $ptr
561 end
562 document xptr
563 Print the pointer portion of an Emacs Lisp value in $.
564 end
565
566 define xmarker
567 xgetptr $
568 print (struct Lisp_Marker *) $ptr
569 end
570 document xmarker
571 Print $ as a marker pointer.
572 This command assumes that $ is an Emacs Lisp marker value.
573 end
574
575 define xoverlay
576 xgetptr $
577 print (struct Lisp_Overlay *) $ptr
578 end
579 document xoverlay
580 Print $ as a overlay pointer.
581 This command assumes that $ is an Emacs Lisp overlay value.
582 end
583
584 define xmiscfree
585 xgetptr $
586 print (struct Lisp_Free *) $ptr
587 end
588 document xmiscfree
589 Print $ as a misc free-cell pointer.
590 This command assumes that $ is an Emacs Lisp Misc value.
591 end
592
593 define xintfwd
594 xgetptr $
595 print (struct Lisp_Intfwd *) $ptr
596 end
597 document xintfwd
598 Print $ as an integer forwarding pointer.
599 This command assumes that $ is an Emacs Lisp Misc value.
600 end
601
602 define xboolfwd
603 xgetptr $
604 print (struct Lisp_Boolfwd *) $ptr
605 end
606 document xboolfwd
607 Print $ as a boolean forwarding pointer.
608 This command assumes that $ is an Emacs Lisp Misc value.
609 end
610
611 define xobjfwd
612 xgetptr $
613 print (struct Lisp_Objfwd *) $ptr
614 end
615 document xobjfwd
616 Print $ as an object forwarding pointer.
617 This command assumes that $ is an Emacs Lisp Misc value.
618 end
619
620 define xbufobjfwd
621 xgetptr $
622 print (struct Lisp_Buffer_Objfwd *) $ptr
623 end
624 document xbufobjfwd
625 Print $ as a buffer-local object forwarding pointer.
626 This command assumes that $ is an Emacs Lisp Misc value.
627 end
628
629 define xkbobjfwd
630 xgetptr $
631 print (struct Lisp_Kboard_Objfwd *) $ptr
632 end
633 document xkbobjfwd
634 Print $ as a kboard-local object forwarding pointer.
635 This command assumes that $ is an Emacs Lisp Misc value.
636 end
637
638 define xbuflocal
639 xgetptr $
640 print (struct Lisp_Buffer_Local_Value *) $ptr
641 end
642 document xbuflocal
643 Print $ as a buffer-local-value pointer.
644 This command assumes that $ is an Emacs Lisp Misc value.
645 end
646
647 define xsymbol
648 set $sym = $
649 xgetptr $sym
650 print (struct Lisp_Symbol *) $ptr
651 xprintsym $sym
652 echo \n
653 end
654 document xsymbol
655 Print the name and address of the symbol $.
656 This command assumes that $ is an Emacs Lisp symbol value.
657 end
658
659 define xstring
660 xgetptr $
661 print (struct Lisp_String *) $ptr
662 xprintstr $
663 echo \n
664 end
665 document xstring
666 Print the contents and address of the string $.
667 This command assumes that $ is an Emacs Lisp string value.
668 end
669
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
675 end
676 document xvector
677 Print the contents and address of the vector $.
678 This command assumes that $ is an Emacs Lisp vector value.
679 end
680
681 define xprocess
682 xgetptr $
683 print (struct Lisp_Process *) $ptr
684 output *$
685 echo \n
686 end
687 document xprocess
688 Print the address of the struct Lisp_process to which $ points.
689 This command assumes that $ is a Lisp_Object.
690 end
691
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
699 end
700 document xframe
701 Print $ as a frame pointer.
702 This command assumes $ is an Emacs Lisp frame value.
703 end
704
705 define xcompiled
706 xgetptr $
707 print (struct Lisp_Vector *) $ptr
708 output ($->contents[0])@($->size & 0xff)
709 end
710 document xcompiled
711 Print $ as a compiled function pointer.
712 This command assumes that $ is an Emacs Lisp compiled value.
713 end
714
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
728 end
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".
732 end
733
734 define xwinconfig
735 xgetptr $
736 print (struct save_window_data *) $ptr
737 end
738 document xwinconfig
739 Print $ as a window configuration pointer.
740 This command assumes that $ is an Emacs Lisp window configuration value.
741 end
742
743 define xsubr
744 xgetptr $
745 print (struct Lisp_Subr *) $ptr
746 output *$
747 echo \n
748 end
749 document xsubr
750 Print the address of the subr which the Lisp_Object $ points to.
751 end
752
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
760 end
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.
764 end
765
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
771 end
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.
775 end
776
777 define xbuffer
778 xgetptr $
779 print (struct buffer *) $ptr
780 xgetptr $->name
781 output ((struct Lisp_String *) $ptr)->data
782 echo \n
783 end
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.
787 end
788
789 define xhashtable
790 xgetptr $
791 print (struct Lisp_Hash_Table *) $ptr
792 end
793 document xhashtable
794 Set $ as a hash table pointer.
795 This command assumes that $ is an Emacs Lisp hash table value.
796 end
797
798 define xcons
799 xgetptr $
800 print (struct Lisp_Cons *) $ptr
801 output/x *$
802 echo \n
803 end
804 document xcons
805 Print the contents of $ as an Emacs Lisp cons.
806 end
807
808 define nextcons
809 p $.u.cdr
810 xcons
811 end
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.
816 end
817 define xcar
818 xgetptr $
819 xgettype $
820 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
821 end
822 document xcar
823 Assume that $ is an Emacs Lisp pair and print its car.
824 end
825
826 define xcdr
827 xgetptr $
828 xgettype $
829 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
830 end
831 document xcdr
832 Assume that $ is an Emacs Lisp pair and print its cdr.
833 end
834
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
855 end
856 document xlist
857 Print $ assuming it is a list.
858 end
859
860 define xfloat
861 xgetptr $
862 print ((struct Lisp_Float *) $ptr)->u.data
863 end
864 document xfloat
865 Print $ assuming it is a lisp floating-point number.
866 end
867
868 define xscrollbar
869 xgetptr $
870 print (struct scrollbar *) $ptr
871 output *$
872 echo \n
873 end
874 document xscrollbar
875 Print $ as a scrollbar pointer.
876 end
877
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
975 end
976 document xpr
977 Print $ as a lisp object of any type.
978 end
979
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)
983 end
984
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
991 end
992 document xprintsym
993 Print argument as a symbol.
994 end
995
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
1004 end
1005 document xcoding
1006 Print the name and attributes of coding system that has ID (argument).
1007 end
1008
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
1014 end
1015 document xcharset
1016 Print the name of charset that has ID (argument).
1017 end
1018
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
1040 end
1041
1042 define xbacktrace
1043 set $bt = backtrace_list
1044 while $bt
1045 xgettype (*$bt->function)
1046 if $type == Lisp_Symbol
1047 xprintsym (*$bt->function)
1048 printf " (0x%x)\n", $bt->args
1049 else
1050 printf "0x%x ", *$bt->function
1051 if $type == Lisp_Vectorlike
1052 xgetptr (*$bt->function)
1053 set $size = ((struct Lisp_Vector *) $ptr)->size
1054 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1055 else
1056 printf "Lisp type %d", $type
1057 end
1058 echo \n
1059 end
1060 set $bt = $bt->next
1061 end
1062 end
1063 document xbacktrace
1064 Print a backtrace of Lisp function calls from backtrace_list.
1065 Set a breakpoint at Fsignal and call this to see from where
1066 an error was signaled.
1067 end
1068
1069 define which
1070 set debug_print (which_symbols ($arg0))
1071 end
1072 document which
1073 Print symbols which references a given lisp object
1074 either as its symbol value or symbol function.
1075 end
1076
1077 define xbytecode
1078 set $bt = byte_stack_list
1079 while $bt
1080 xgettype ($bt->byte_string)
1081 printf "0x%x => ", $bt->byte_string
1082 which $bt->byte_string
1083 set $bt = $bt->next
1084 end
1085 end
1086 document xbytecode
1087 Print a backtrace of the byte code stack.
1088 end
1089
1090 # Show Lisp backtrace after normal backtrace.
1091 define hookpost-backtrace
1092 set $bt = backtrace_list
1093 if $bt
1094 echo \n
1095 echo Lisp Backtrace:\n
1096 xbacktrace
1097 end
1098 end
1099
1100 define xreload
1101 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1102 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1103 end
1104 document xreload
1105 When starting Emacs a second time in the same gdb session under
1106 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1107 their values. (The same happens on current (2000) versions of GNU/Linux
1108 with gdb 5.0.)
1109 This function reloads them.
1110 end
1111 xreload
1112
1113 # Flush display (X only)
1114 define ff
1115 set x_flush (0)
1116 end
1117 document ff
1118 Flush pending X window display updates to screen.
1119 Works only when an inferior emacs is executing.
1120 end
1121
1122
1123 define hook-run
1124 xreload
1125 end
1126
1127 # Call xreload if a new Emacs executable is loaded.
1128 define hookpost-run
1129 xreload
1130 end
1131
1132 set print pretty on
1133 set print sevenbit-strings
1134
1135 show environment DISPLAY
1136 show environment TERM
1137 set args -geometry 80x40+0+0
1138
1139 # People get bothered when they see messages about non-existent functions...
1140 xgetptr Vsystem_type
1141 # $ptr is NULL in temacs
1142 if ($ptr != 0)
1143 set $tem = (struct Lisp_Symbol *) $ptr
1144 xgetptr $tem->xname
1145 set $tem = (struct Lisp_String *) $ptr
1146 set $tem = (char *) $tem->data
1147
1148 # Don't let abort actually run, as it will make stdio stop working and
1149 # therefore the `pr' command above as well.
1150 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1151 # The windows-nt build replaces abort with its own function.
1152 break w32_abort
1153 else
1154 break abort
1155 end
1156 end
1157
1158 # x_error_quitter is defined only on X. But window-system is set up
1159 # only at run time, during Emacs startup, so we need to defer setting
1160 # the breakpoint. init_sys_modes is the first function called on
1161 # every platform after init_display, where window-system is set.
1162 tbreak init_sys_modes
1163 commands
1164 silent
1165 xgetptr Vinitial_window_system
1166 set $tem = (struct Lisp_Symbol *) $ptr
1167 xgetptr $tem->xname
1168 set $tem = (struct Lisp_String *) $ptr
1169 set $tem = (char *) $tem->data
1170 # If we are running in synchronous mode, we want a chance to look
1171 # around before Emacs exits. Perhaps we should put the break
1172 # somewhere else instead...
1173 if $tem[0] == 'x' && $tem[1] == '\0'
1174 break x_error_quitter
1175 end
1176 continue
1177 end
1178 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe