]> code.delx.au - gnu-emacs/blob - src/.gdbinit
Merge from mainline.
[gnu-emacs] / src / .gdbinit
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
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 define pitmethod
167 set $itmethod = $arg0
168 # output $itmethod
169 if ($itmethod == 0)
170 printf "GET_FROM_BUFFER"
171 end
172 if ($itmethod == 1)
173 printf "GET_FROM_DISPLAY_VECTOR"
174 end
175 if ($itmethod == 2)
176 printf "GET_FROM_STRING"
177 end
178 if ($itmethod == 3)
179 printf "GET_FROM_C_STRING"
180 end
181 if ($itmethod == 4)
182 printf "GET_FROM_IMAGE"
183 end
184 if ($itmethod == 5)
185 printf "GET_FROM_STRETCH"
186 end
187 if ($itmethod < 0 || $itmethod > 5)
188 output $itmethod
189 end
190 end
191 document pitmethod
192 Pretty print it->method given as first arg
193 end
194
195 # Print out iterator given as first arg
196 define pitx
197 set $it = $arg0
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
201 end
202 printf " pos=%d", $it->position.charpos
203 if ($it->position.charpos != $it->position.bytepos)
204 printf "[%d]", $it->position.bytepos
205 end
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
209 end
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)
214 printf " MB"
215 end
216 if ($it->header_line_p)
217 printf " HL"
218 end
219 if ($it->n_overlay_strings > 0)
220 printf " nov=%d", $it->n_overlay_strings
221 end
222 if ($it->sp != 0)
223 printf " sp=%d", $it->sp
224 end
225 # IT_CHARACTER
226 if ($it->what == 0)
227 if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
228 printf " ch='%c'", $it->c
229 else
230 printf " ch=[%d,%d]", $it->c, $it->len
231 end
232 else
233 printf " "
234 # output $it->what
235 if ($it->what == 0)
236 printf "IT_CHARACTER"
237 end
238 if ($it->what == 1)
239 printf "IT_COMPOSITION"
240 end
241 if ($it->what == 2)
242 printf "IT_IMAGE"
243 end
244 if ($it->what == 3)
245 printf "IT_STRETCH"
246 end
247 if ($it->what == 4)
248 printf "IT_EOB"
249 end
250 if ($it->what == 5)
251 printf "IT_TRUNCATION"
252 end
253 if ($it->what == 6)
254 printf "IT_CONTINUATION"
255 end
256 if ($it->what < 0 || $it->what > 6)
257 output $it->what
258 end
259 end
260 if ($it->method != 0)
261 # !GET_FROM_BUFFER
262 printf " next="
263 pitmethod $it->method
264 if ($it->method == 2)
265 # GET_FROM_STRING
266 printf "[%d]", $it->current.string_pos.charpos
267 end
268 if ($it->method == 4)
269 # GET_FROM_IMAGE
270 printf "[%d]", $it->image_id
271 end
272 end
273 printf "\n"
274 if ($it->bidi_p)
275 printf "BIDI: base_stop=%d prev_stop=%d level=%d\n", $it->base_level_stop, $it->prev_stop, $it->bidi_it.resolved_level
276 end
277 if ($it->region_beg_charpos >= 0)
278 printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
279 end
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
286 printf "\n"
287 set $i = 0
288 while ($i < $it->sp && $i < 4)
289 set $e = $it->stack[$i]
290 printf "stack[%d]: ", $i
291 pitmethod $e->method
292 printf "[%d]", $e->position.charpos
293 printf "\n"
294 set $i = $i + 1
295 end
296 end
297 document pitx
298 Pretty print a display iterator.
299 Take one arg, an iterator object or pointer.
300 end
301
302 define pit
303 pitx it
304 end
305 document pit
306 Pretty print the display iterator it.
307 end
308
309 define prowx
310 set $row = $arg0
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", $row->visible_height
315 printf " L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
316 printf "\n"
317 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
318 if ($row->enabled_p)
319 printf " ENA"
320 end
321 if ($row->displays_text_p)
322 printf " DISP"
323 end
324 if ($row->mode_line_p)
325 printf " MODEL"
326 end
327 if ($row->continued_p)
328 printf " CONT"
329 end
330 if ($row-> truncated_on_left_p)
331 printf " TRUNC:L"
332 end
333 if ($row-> truncated_on_right_p)
334 printf " TRUNC:R"
335 end
336 if ($row->starts_in_middle_of_char_p)
337 printf " STARTMID"
338 end
339 if ($row->ends_in_middle_of_char_p)
340 printf " ENDMID"
341 end
342 if ($row->ends_in_newline_from_string_p)
343 printf " ENDNLFS"
344 end
345 if ($row->ends_at_zv_p)
346 printf " ENDZV"
347 end
348 if ($row->overlapped_p)
349 printf " OLAPD"
350 end
351 if ($row->overlapping_p)
352 printf " OLAPNG"
353 end
354 printf "\n"
355 end
356 document prowx
357 Pretty print information about glyph_row.
358 Takes one argument, a row object or pointer.
359 end
360
361 define prow
362 prowx row
363 end
364 document prow
365 Pretty print information about glyph_row in row.
366 end
367
368
369 define pcursorx
370 set $cp = $arg0
371 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
372 end
373 document pcursorx
374 Pretty print a window cursor.
375 end
376
377 define pcursor
378 printf "output: "
379 pcursorx output_cursor
380 printf "\n"
381 end
382 document pcursor
383 Pretty print the output_cursor.
384 end
385
386 define pwinx
387 set $w = $arg0
388 xgetint $w->sequence_number
389 if ($w->mini_p != Qnil)
390 printf "Mini "
391 end
392 printf "Window %d ", $int
393 xgetptr $w->buffer
394 set $tem = (struct buffer *) $ptr
395 xgetptr $tem->name
396 printf "%s", ((struct Lisp_String *) $ptr)->data
397 printf "\n"
398 xgetptr $w->start
399 set $tem = (struct Lisp_Marker *) $ptr
400 printf "start=%d end:", $tem->charpos
401 if ($w->window_end_valid != Qnil)
402 xgetint $w->window_end_pos
403 printf "pos=%d", $int
404 xgetint $w->window_end_vpos
405 printf " vpos=%d", $int
406 else
407 printf "invalid"
408 end
409 printf " vscroll=%d", $w->vscroll
410 if ($w->force_start != Qnil)
411 printf " FORCE_START"
412 end
413 if ($w->must_be_updated_p)
414 printf " MUST_UPD"
415 end
416 printf "\n"
417 printf "cursor: "
418 pcursorx $w->cursor
419 printf " phys: "
420 pcursorx $w->phys_cursor
421 if ($w->phys_cursor_on_p)
422 printf " ON"
423 else
424 printf " OFF"
425 end
426 printf " blk="
427 if ($w->last_cursor_off_p != $w->cursor_off_p)
428 if ($w->last_cursor_off_p)
429 printf "ON->"
430 else
431 printf "OFF->"
432 end
433 end
434 if ($w->cursor_off_p)
435 printf "ON"
436 else
437 printf "OFF"
438 end
439 printf "\n"
440 end
441 document pwinx
442 Pretty print a window structure.
443 Takes one argument, a pointer to a window structure.
444 end
445
446 define pwin
447 pwinx w
448 end
449 document pwin
450 Pretty print window structure w.
451 end
452
453 define pbiditype
454 if ($arg0 == 0)
455 printf "UNDEF"
456 end
457 if ($arg0 == 1)
458 printf "L"
459 end
460 if ($arg0 == 2)
461 printf "R"
462 end
463 if ($arg0 == 3)
464 printf "EN"
465 end
466 if ($arg0 == 4)
467 printf "AN"
468 end
469 if ($arg0 == 5)
470 printf "BN"
471 end
472 if ($arg0 == 6)
473 printf "B"
474 end
475 if ($arg0 < 0 || $arg0 > 6)
476 printf "%d??", $arg0
477 end
478 end
479 document pbiditype
480 Print textual description of bidi type given as first argument.
481 end
482
483 define pgx
484 set $g = $arg0
485 # CHAR_GLYPH
486 if ($g->type == 0)
487 if ($g->u.ch >= ' ' && $g->u.ch < 127)
488 printf "CHAR[%c]", $g->u.ch
489 else
490 printf "CHAR[0x%x]", $g->u.ch
491 end
492 end
493 # COMPOSITE_GLYPH
494 if ($g->type == 1)
495 printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->u.cmp.from, $g->u.cmp.to
496 end
497 # IMAGE_GLYPH
498 if ($g->type == 2)
499 printf "IMAGE[%d]", $g->u.img_id
500 end
501 # STRETCH_GLYPH
502 if ($g->type == 3)
503 printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
504 end
505 xgettype ($g->object)
506 if ($type == Lisp_String)
507 printf " str=%x[%d]", $g->object, $g->charpos
508 else
509 printf " pos=%d", $g->charpos
510 end
511 # For characters, print their resolved level and bidi type
512 if ($g->type == 0)
513 printf " blev=%d,btyp=", $g->resolved_level
514 pbiditype $g->bidi_type
515 end
516 printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
517 # If not DEFAULT_FACE_ID
518 if ($g->face_id != 0)
519 printf " face=%d", $g->face_id
520 end
521 if ($g->voffset)
522 printf " vof=%d", $g->voffset
523 end
524 if ($g->multibyte_p)
525 printf " MB"
526 end
527 if ($g->padding_p)
528 printf " PAD"
529 end
530 if ($g->glyph_not_available_p)
531 printf " N/A"
532 end
533 if ($g->overlaps_vertically_p)
534 printf " OVL"
535 end
536 if ($g->left_box_line_p)
537 printf " ["
538 end
539 if ($g->right_box_line_p)
540 printf " ]"
541 end
542 if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height)
543 printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height
544 end
545 printf "\n"
546 end
547 document pgx
548 Pretty print a glyph structure.
549 Takes one argument, a pointer to a glyph structure.
550 end
551
552 define pg
553 set $pgidx = 0
554 pgx glyph
555 end
556 document pg
557 Pretty print glyph structure glyph.
558 end
559
560 define pgi
561 set $pgidx = $arg0
562 pgx (&glyph[$pgidx])
563 end
564 document pgi
565 Pretty print glyph structure glyph[I].
566 Takes one argument, a integer I.
567 end
568
569 define pgn
570 set $pgidx = $pgidx + 1
571 pgx (&glyph[$pgidx])
572 end
573 document pgn
574 Pretty print next glyph structure.
575 end
576
577 define pgrowx
578 set $row = $arg0
579 set $area = 0
580 set $xofs = $row->x
581 while ($area < 3)
582 set $used = $row->used[$area]
583 if ($used > 0)
584 set $gl0 = $row->glyphs[$area]
585 set $pgidx = 0
586 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
587 while ($pgidx < $used)
588 printf "%3d %4d: ", $pgidx, $xofs
589 pgx $gl0[$pgidx]
590 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
591 set $pgidx = $pgidx + 1
592 end
593 end
594 set $area = $area + 1
595 end
596 end
597 document pgrowx
598 Pretty print all glyphs in a row structure.
599 Takes one argument, a pointer to a row structure.
600 end
601
602 define pgrow
603 pgrowx row
604 end
605 document pgrow
606 Pretty print all glyphs in row structure row.
607 end
608
609 define pgrowit
610 pgrowx it->glyph_row
611 end
612 document pgrowit
613 Pretty print all glyphs in it->glyph_row.
614 end
615
616 define xtype
617 xgettype $
618 output $type
619 echo \n
620 if $type == Lisp_Misc
621 xmisctype
622 else
623 if $type == Lisp_Vectorlike
624 xvectype
625 end
626 end
627 end
628 document xtype
629 Print the type of $, assuming it is an Emacs Lisp value.
630 If the first type printed is Lisp_Vector or Lisp_Misc,
631 a second line gives the more precise type.
632 end
633
634 define xvectype
635 xgetptr $
636 set $size = ((struct Lisp_Vector *) $ptr)->size
637 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
638 echo \n
639 end
640 document xvectype
641 Print the size or vector subtype of $.
642 This command assumes that $ is a vector or pseudovector.
643 end
644
645 define xmisctype
646 xgetptr $
647 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
648 echo \n
649 end
650 document xmisctype
651 Assume that $ is some misc type and print its specific type.
652 end
653
654 define xint
655 xgetint $
656 print $int
657 end
658 document xint
659 Print $ as an Emacs Lisp integer. This gets the sign right.
660 end
661
662 define xptr
663 xgetptr $
664 print (void *) $ptr
665 end
666 document xptr
667 Print the pointer portion of an Emacs Lisp value in $.
668 end
669
670 define xmarker
671 xgetptr $
672 print (struct Lisp_Marker *) $ptr
673 end
674 document xmarker
675 Print $ as a marker pointer.
676 This command assumes that $ is an Emacs Lisp marker value.
677 end
678
679 define xoverlay
680 xgetptr $
681 print (struct Lisp_Overlay *) $ptr
682 end
683 document xoverlay
684 Print $ as a overlay pointer.
685 This command assumes that $ is an Emacs Lisp overlay value.
686 end
687
688 define xmiscfree
689 xgetptr $
690 print (struct Lisp_Free *) $ptr
691 end
692 document xmiscfree
693 Print $ as a misc free-cell pointer.
694 This command assumes that $ is an Emacs Lisp Misc value.
695 end
696
697 define xintfwd
698 xgetptr $
699 print (struct Lisp_Intfwd *) $ptr
700 end
701 document xintfwd
702 Print $ as an integer forwarding pointer.
703 This command assumes that $ is an Emacs Lisp Misc value.
704 end
705
706 define xboolfwd
707 xgetptr $
708 print (struct Lisp_Boolfwd *) $ptr
709 end
710 document xboolfwd
711 Print $ as a boolean forwarding pointer.
712 This command assumes that $ is an Emacs Lisp Misc value.
713 end
714
715 define xobjfwd
716 xgetptr $
717 print (struct Lisp_Objfwd *) $ptr
718 end
719 document xobjfwd
720 Print $ as an object forwarding pointer.
721 This command assumes that $ is an Emacs Lisp Misc value.
722 end
723
724 define xbufobjfwd
725 xgetptr $
726 print (struct Lisp_Buffer_Objfwd *) $ptr
727 end
728 document xbufobjfwd
729 Print $ as a buffer-local object forwarding pointer.
730 This command assumes that $ is an Emacs Lisp Misc value.
731 end
732
733 define xkbobjfwd
734 xgetptr $
735 print (struct Lisp_Kboard_Objfwd *) $ptr
736 end
737 document xkbobjfwd
738 Print $ as a kboard-local object forwarding pointer.
739 This command assumes that $ is an Emacs Lisp Misc value.
740 end
741
742 define xbuflocal
743 xgetptr $
744 print (struct Lisp_Buffer_Local_Value *) $ptr
745 end
746 document xbuflocal
747 Print $ as a buffer-local-value pointer.
748 This command assumes that $ is an Emacs Lisp Misc value.
749 end
750
751 define xsymbol
752 set $sym = $
753 xgetptr $sym
754 print (struct Lisp_Symbol *) $ptr
755 xprintsym $sym
756 echo \n
757 end
758 document xsymbol
759 Print the name and address of the symbol $.
760 This command assumes that $ is an Emacs Lisp symbol value.
761 end
762
763 define xstring
764 xgetptr $
765 print (struct Lisp_String *) $ptr
766 xprintstr $
767 echo \n
768 end
769 document xstring
770 Print the contents and address of the string $.
771 This command assumes that $ is an Emacs Lisp string value.
772 end
773
774 define xvector
775 xgetptr $
776 print (struct Lisp_Vector *) $ptr
777 output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
778 echo \n
779 end
780 document xvector
781 Print the contents and address of the vector $.
782 This command assumes that $ is an Emacs Lisp vector value.
783 end
784
785 define xprocess
786 xgetptr $
787 print (struct Lisp_Process *) $ptr
788 output *$
789 echo \n
790 end
791 document xprocess
792 Print the address of the struct Lisp_process to which $ points.
793 This command assumes that $ is a Lisp_Object.
794 end
795
796 define xframe
797 xgetptr $
798 print (struct frame *) $ptr
799 xgetptr $->name
800 set $ptr = (struct Lisp_String *) $ptr
801 xprintstr $ptr
802 echo \n
803 end
804 document xframe
805 Print $ as a frame pointer.
806 This command assumes $ is an Emacs Lisp frame value.
807 end
808
809 define xcompiled
810 xgetptr $
811 print (struct Lisp_Vector *) $ptr
812 output ($->contents[0])@($->size & 0xff)
813 end
814 document xcompiled
815 Print $ as a compiled function pointer.
816 This command assumes that $ is an Emacs Lisp compiled value.
817 end
818
819 define xwindow
820 xgetptr $
821 print (struct window *) $ptr
822 set $window = (struct window *) $ptr
823 xgetint $window->total_cols
824 set $width=$int
825 xgetint $window->total_lines
826 set $height=$int
827 xgetint $window->left_col
828 set $left=$int
829 xgetint $window->top_line
830 set $top=$int
831 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
832 end
833 document xwindow
834 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
835 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
836 end
837
838 define xwinconfig
839 xgetptr $
840 print (struct save_window_data *) $ptr
841 end
842 document xwinconfig
843 Print $ as a window configuration pointer.
844 This command assumes that $ is an Emacs Lisp window configuration value.
845 end
846
847 define xsubr
848 xgetptr $
849 print (struct Lisp_Subr *) $ptr
850 output *$
851 echo \n
852 end
853 document xsubr
854 Print the address of the subr which the Lisp_Object $ points to.
855 end
856
857 define xchartable
858 xgetptr $
859 print (struct Lisp_Char_Table *) $ptr
860 printf "Purpose: "
861 xprintsym $->purpose
862 printf " %d extra slots", ($->size & 0x1ff) - 68
863 echo \n
864 end
865 document xchartable
866 Print the address of the char-table $, and its purpose.
867 This command assumes that $ is an Emacs Lisp char-table value.
868 end
869
870 define xboolvector
871 xgetptr $
872 print (struct Lisp_Bool_Vector *) $ptr
873 output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
874 echo \n
875 end
876 document xboolvector
877 Print the contents and address of the bool-vector $.
878 This command assumes that $ is an Emacs Lisp bool-vector value.
879 end
880
881 define xbuffer
882 xgetptr $
883 print (struct buffer *) $ptr
884 xgetptr $->name
885 output ((struct Lisp_String *) $ptr)->data
886 echo \n
887 end
888 document xbuffer
889 Set $ as a buffer pointer and the name of the buffer.
890 This command assumes $ is an Emacs Lisp buffer value.
891 end
892
893 define xhashtable
894 xgetptr $
895 print (struct Lisp_Hash_Table *) $ptr
896 end
897 document xhashtable
898 Set $ as a hash table pointer.
899 This command assumes that $ is an Emacs Lisp hash table value.
900 end
901
902 define xcons
903 xgetptr $
904 print (struct Lisp_Cons *) $ptr
905 output/x *$
906 echo \n
907 end
908 document xcons
909 Print the contents of $ as an Emacs Lisp cons.
910 end
911
912 define nextcons
913 p $.u.cdr
914 xcons
915 end
916 document nextcons
917 Print the contents of the next cell in a list.
918 This command assumes that the last thing you printed was a cons cell contents
919 (type struct Lisp_Cons) or a pointer to one.
920 end
921 define xcar
922 xgetptr $
923 xgettype $
924 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
925 end
926 document xcar
927 Assume that $ is an Emacs Lisp pair and print its car.
928 end
929
930 define xcdr
931 xgetptr $
932 xgettype $
933 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
934 end
935 document xcdr
936 Assume that $ is an Emacs Lisp pair and print its cdr.
937 end
938
939 define xlist
940 xgetptr $
941 set $cons = (struct Lisp_Cons *) $ptr
942 xgetptr Qnil
943 set $nil = $ptr
944 set $i = 0
945 while $cons != $nil && $i < 10
946 p/x $cons->car
947 xpr
948 xgetptr $cons->u.cdr
949 set $cons = (struct Lisp_Cons *) $ptr
950 set $i = $i + 1
951 printf "---\n"
952 end
953 if $cons == $nil
954 printf "nil\n"
955 else
956 printf "...\n"
957 p $ptr
958 end
959 end
960 document xlist
961 Print $ assuming it is a list.
962 end
963
964 define xfloat
965 xgetptr $
966 print ((struct Lisp_Float *) $ptr)->u.data
967 end
968 document xfloat
969 Print $ assuming it is a lisp floating-point number.
970 end
971
972 define xscrollbar
973 xgetptr $
974 print (struct scrollbar *) $ptr
975 output *$
976 echo \n
977 end
978 document xscrollbar
979 Print $ as a scrollbar pointer.
980 end
981
982 define xpr
983 xtype
984 if $type == Lisp_Int
985 xint
986 end
987 if $type == Lisp_Symbol
988 xsymbol
989 end
990 if $type == Lisp_String
991 xstring
992 end
993 if $type == Lisp_Cons
994 xcons
995 end
996 if $type == Lisp_Float
997 xfloat
998 end
999 if $type == Lisp_Misc
1000 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1001 if $misc == Lisp_Misc_Free
1002 xmiscfree
1003 end
1004 if $misc == Lisp_Misc_Boolfwd
1005 xboolfwd
1006 end
1007 if $misc == Lisp_Misc_Marker
1008 xmarker
1009 end
1010 if $misc == Lisp_Misc_Intfwd
1011 xintfwd
1012 end
1013 if $misc == Lisp_Misc_Boolfwd
1014 xboolfwd
1015 end
1016 if $misc == Lisp_Misc_Objfwd
1017 xobjfwd
1018 end
1019 if $misc == Lisp_Misc_Buffer_Objfwd
1020 xbufobjfwd
1021 end
1022 if $misc == Lisp_Misc_Buffer_Local_Value
1023 xbuflocal
1024 end
1025 # if $misc == Lisp_Misc_Some_Buffer_Local_Value
1026 # xvalue
1027 # end
1028 if $misc == Lisp_Misc_Overlay
1029 xoverlay
1030 end
1031 if $misc == Lisp_Misc_Kboard_Objfwd
1032 xkbobjfwd
1033 end
1034 # if $misc == Lisp_Misc_Save_Value
1035 # xsavevalue
1036 # end
1037 end
1038 if $type == Lisp_Vectorlike
1039 set $size = ((struct Lisp_Vector *) $ptr)->size
1040 if ($size & PVEC_FLAG)
1041 set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1042 if $vec == PVEC_NORMAL_VECTOR
1043 xvector
1044 end
1045 if $vec == PVEC_PROCESS
1046 xprocess
1047 end
1048 if $vec == PVEC_FRAME
1049 xframe
1050 end
1051 if $vec == PVEC_COMPILED
1052 xcompiled
1053 end
1054 if $vec == PVEC_WINDOW
1055 xwindow
1056 end
1057 if $vec == PVEC_WINDOW_CONFIGURATION
1058 xwinconfig
1059 end
1060 if $vec == PVEC_SUBR
1061 xsubr
1062 end
1063 if $vec == PVEC_CHAR_TABLE
1064 xchartable
1065 end
1066 if $vec == PVEC_BOOL_VECTOR
1067 xboolvector
1068 end
1069 if $vec == PVEC_BUFFER
1070 xbuffer
1071 end
1072 if $vec == PVEC_HASH_TABLE
1073 xhashtable
1074 end
1075 else
1076 xvector
1077 end
1078 end
1079 end
1080 document xpr
1081 Print $ as a lisp object of any type.
1082 end
1083
1084 define xprintstr
1085 set $data = (char *) $arg0->data
1086 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1087 end
1088
1089 define xprintsym
1090 xgetptr $arg0
1091 set $sym = (struct Lisp_Symbol *) $ptr
1092 xgetptr $sym->xname
1093 set $sym_name = (struct Lisp_String *) $ptr
1094 xprintstr $sym_name
1095 end
1096 document xprintsym
1097 Print argument as a symbol.
1098 end
1099
1100 define xcoding
1101 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1102 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1103 set $name = $tmp->contents[$arg0 * 2]
1104 print $name
1105 pr
1106 print $tmp->contents[$arg0 * 2 + 1]
1107 pr
1108 end
1109 document xcoding
1110 Print the name and attributes of coding system that has ID (argument).
1111 end
1112
1113 define xcharset
1114 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1115 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1116 p $tmp->contents[charset_table[$arg0].hash_index * 2]
1117 pr
1118 end
1119 document xcharset
1120 Print the name of charset that has ID (argument).
1121 end
1122
1123 define xfontset
1124 xgetptr $
1125 set $tbl = (struct Lisp_Char_Table *) $ptr
1126 print $tbl
1127 xgetint $tbl->extras[0]
1128 printf " ID:%d", $int
1129 xgettype $tbl->extras[1]
1130 xgetptr $tbl->extras[1]
1131 if $type == Lisp_String
1132 set $ptr = (struct Lisp_String *) $ptr
1133 printf " Name:"
1134 xprintstr $ptr
1135 else
1136 xgetptr $tbl->extras[2]
1137 set $ptr = (struct Lisp_Char_Table *) $ptr
1138 xgetptr $ptr->extras[1]
1139 set $ptr = (struct Lisp_String *) $ptr
1140 printf " Realized from:"
1141 xprintstr $ptr
1142 end
1143 echo \n
1144 end
1145
1146 define xfont
1147 xgetptr $
1148 set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1149 if $size == FONT_SPEC_MAX
1150 print (struct font_spec *) $ptr
1151 else
1152 if $size == FONT_ENTITY_MAX
1153 print (struct font_entity *) $ptr
1154 else
1155 print (struct font *) $ptr
1156 end
1157 end
1158 end
1159 document xfont
1160 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1161 end
1162
1163 define xbacktrace
1164 set $bt = backtrace_list
1165 while $bt
1166 xgettype (*$bt->function)
1167 if $type == Lisp_Symbol
1168 xprintsym (*$bt->function)
1169 printf " (0x%x)\n", $bt->args
1170 else
1171 printf "0x%x ", *$bt->function
1172 if $type == Lisp_Vectorlike
1173 xgetptr (*$bt->function)
1174 set $size = ((struct Lisp_Vector *) $ptr)->size
1175 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1176 else
1177 printf "Lisp type %d", $type
1178 end
1179 echo \n
1180 end
1181 set $bt = $bt->next
1182 end
1183 end
1184 document xbacktrace
1185 Print a backtrace of Lisp function calls from backtrace_list.
1186 Set a breakpoint at Fsignal and call this to see from where
1187 an error was signaled.
1188 end
1189
1190 define which
1191 set debug_print (which_symbols ($arg0))
1192 end
1193 document which
1194 Print symbols which references a given lisp object
1195 either as its symbol value or symbol function.
1196 end
1197
1198 define xbytecode
1199 set $bt = byte_stack_list
1200 while $bt
1201 xgettype ($bt->byte_string)
1202 printf "0x%x => ", $bt->byte_string
1203 which $bt->byte_string
1204 set $bt = $bt->next
1205 end
1206 end
1207 document xbytecode
1208 Print a backtrace of the byte code stack.
1209 end
1210
1211 # Show Lisp backtrace after normal backtrace.
1212 define hookpost-backtrace
1213 set $bt = backtrace_list
1214 if $bt
1215 echo \n
1216 echo Lisp Backtrace:\n
1217 xbacktrace
1218 end
1219 end
1220
1221 define xreload
1222 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1223 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1224 end
1225 document xreload
1226 When starting Emacs a second time in the same gdb session under
1227 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1228 their values. (The same happens on current (2000) versions of GNU/Linux
1229 with gdb 5.0.)
1230 This function reloads them.
1231 end
1232 xreload
1233
1234 # Flush display (X only)
1235 define ff
1236 set x_flush (0)
1237 end
1238 document ff
1239 Flush pending X window display updates to screen.
1240 Works only when an inferior emacs is executing.
1241 end
1242
1243
1244 define hook-run
1245 xreload
1246 end
1247
1248 # Call xreload if a new Emacs executable is loaded.
1249 define hookpost-run
1250 xreload
1251 end
1252
1253 set print pretty on
1254 set print sevenbit-strings
1255
1256 show environment DISPLAY
1257 show environment TERM
1258
1259 # People get bothered when they see messages about non-existent functions...
1260 xgetptr Vsystem_type
1261 # $ptr is NULL in temacs
1262 if ($ptr != 0)
1263 set $tem = (struct Lisp_Symbol *) $ptr
1264 xgetptr $tem->xname
1265 set $tem = (struct Lisp_String *) $ptr
1266 set $tem = (char *) $tem->data
1267
1268 # Don't let abort actually run, as it will make stdio stop working and
1269 # therefore the `pr' command above as well.
1270 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1271 # The windows-nt build replaces abort with its own function.
1272 break w32_abort
1273 else
1274 break abort
1275 end
1276 end
1277
1278 # x_error_quitter is defined only on X. But window-system is set up
1279 # only at run time, during Emacs startup, so we need to defer setting
1280 # the breakpoint. init_sys_modes is the first function called on
1281 # every platform after init_display, where window-system is set.
1282 tbreak init_sys_modes
1283 commands
1284 silent
1285 xgetptr Vinitial_window_system
1286 set $tem = (struct Lisp_Symbol *) $ptr
1287 xgetptr $tem->xname
1288 set $tem = (struct Lisp_String *) $ptr
1289 set $tem = (char *) $tem->data
1290 # If we are running in synchronous mode, we want a chance to look
1291 # around before Emacs exits. Perhaps we should put the break
1292 # somewhere else instead...
1293 if $tem[0] == 'x' && $tem[1] == '\0'
1294 break x_error_quitter
1295 end
1296 continue
1297 end
1298 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe