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