]> 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, 2010
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 ? (gdb_use_lsb ? $bugfix.u.val << gdb_gctypebits : $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->slice.cmp.from, $g->slice.cmp.to
498 end
499 # GLYPHLESS_GLYPH
500 if ($g->type == 2)
501 printf "GLYPHLESS["
502 if ($g->u.glyphless.method == 0)
503 printf "THIN]"
504 end
505 if ($g->u.glyphless.method == 1)
506 printf "EMPTY]"
507 end
508 if ($g->u.glyphless.method == 2)
509 printf "ACRO]"
510 end
511 if ($g->u.glyphless.method == 3)
512 printf "HEX]"
513 end
514 end
515 # IMAGE_GLYPH
516 if ($g->type == 3)
517 printf "IMAGE[%d]", $g->u.img_id
518 end
519 # STRETCH_GLYPH
520 if ($g->type == 4)
521 printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
522 end
523 xgettype ($g->object)
524 if ($type == Lisp_String)
525 printf " str=%x[%d]", $g->object, $g->charpos
526 else
527 printf " pos=%d", $g->charpos
528 end
529 # For characters, print their resolved level and bidi type
530 if ($g->type == 0)
531 printf " blev=%d,btyp=", $g->resolved_level
532 pbiditype $g->bidi_type
533 end
534 printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
535 # If not DEFAULT_FACE_ID
536 if ($g->face_id != 0)
537 printf " face=%d", $g->face_id
538 end
539 if ($g->voffset)
540 printf " vof=%d", $g->voffset
541 end
542 if ($g->multibyte_p)
543 printf " MB"
544 end
545 if ($g->padding_p)
546 printf " PAD"
547 end
548 if ($g->glyph_not_available_p)
549 printf " N/A"
550 end
551 if ($g->overlaps_vertically_p)
552 printf " OVL"
553 end
554 if ($g->avoid_cursor_p)
555 printf " AVOID"
556 end
557 if ($g->left_box_line_p)
558 printf " ["
559 end
560 if ($g->right_box_line_p)
561 printf " ]"
562 end
563 if ($g->slice.img.x || $g->slice.img.y || $g->slice.img.width || $g->slice.img.height)
564 printf " slice=%d,%d,%d,%d" ,$g->slice.img.x, $g->slice.img.y, $g->slice.img.width, $g->slice.img.height
565 end
566 printf "\n"
567 end
568 document pgx
569 Pretty print a glyph structure.
570 Takes one argument, a pointer to a glyph structure.
571 end
572
573 define pg
574 set $pgidx = 0
575 pgx glyph
576 end
577 document pg
578 Pretty print glyph structure glyph.
579 end
580
581 define pgi
582 set $pgidx = $arg0
583 pgx (&glyph[$pgidx])
584 end
585 document pgi
586 Pretty print glyph structure glyph[I].
587 Takes one argument, a integer I.
588 end
589
590 define pgn
591 set $pgidx = $pgidx + 1
592 pgx (&glyph[$pgidx])
593 end
594 document pgn
595 Pretty print next glyph structure.
596 end
597
598 define pgrowx
599 set $row = $arg0
600 set $area = 0
601 set $xofs = $row->x
602 while ($area < 3)
603 set $used = $row->used[$area]
604 if ($used > 0)
605 set $gl0 = $row->glyphs[$area]
606 set $pgidx = 0
607 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
608 while ($pgidx < $used)
609 printf "%3d %4d: ", $pgidx, $xofs
610 pgx $gl0[$pgidx]
611 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
612 set $pgidx = $pgidx + 1
613 end
614 end
615 set $area = $area + 1
616 end
617 end
618 document pgrowx
619 Pretty print all glyphs in a row structure.
620 Takes one argument, a pointer to a row structure.
621 end
622
623 define pgrow
624 pgrowx row
625 end
626 document pgrow
627 Pretty print all glyphs in row structure row.
628 end
629
630 define pgrowit
631 pgrowx it->glyph_row
632 end
633 document pgrowit
634 Pretty print all glyphs in it->glyph_row.
635 end
636
637 define prowlims
638 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
639 end
640 document prowlims
641 Print important attributes of a glyph_row structure.
642 Takes one argument, a pointer to a glyph_row structure.
643 end
644
645 define pmtxrows
646 set $mtx = $arg0
647 set $gl = $mtx->rows
648 set $glend = $mtx->rows + $mtx->nrows - 1
649 set $i = 0
650 while ($gl < $glend)
651 printf "%d: ", $i
652 prowlims $gl
653 set $gl = $gl + 1
654 set $i = $i + 1
655 end
656 end
657 document pmtxrows
658 Print data about glyph rows in a glyph matrix.
659 Takes one argument, a pointer to a glyph_matrix structure.
660 end
661
662 define xtype
663 xgettype $
664 output $type
665 echo \n
666 if $type == Lisp_Misc
667 xmisctype
668 else
669 if $type == Lisp_Vectorlike
670 xvectype
671 end
672 end
673 end
674 document xtype
675 Print the type of $, assuming it is an Emacs Lisp value.
676 If the first type printed is Lisp_Vector or Lisp_Misc,
677 a second line gives the more precise type.
678 end
679
680 define xvectype
681 xgetptr $
682 set $size = ((struct Lisp_Vector *) $ptr)->size
683 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
684 echo \n
685 end
686 document xvectype
687 Print the size or vector subtype of $.
688 This command assumes that $ is a vector or pseudovector.
689 end
690
691 define xmisctype
692 xgetptr $
693 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
694 echo \n
695 end
696 document xmisctype
697 Assume that $ is some misc type and print its specific type.
698 end
699
700 define xint
701 xgetint $
702 print $int
703 end
704 document xint
705 Print $ as an Emacs Lisp integer. This gets the sign right.
706 end
707
708 define xptr
709 xgetptr $
710 print (void *) $ptr
711 end
712 document xptr
713 Print the pointer portion of an Emacs Lisp value in $.
714 end
715
716 define xmarker
717 xgetptr $
718 print (struct Lisp_Marker *) $ptr
719 end
720 document xmarker
721 Print $ as a marker pointer.
722 This command assumes that $ is an Emacs Lisp marker value.
723 end
724
725 define xoverlay
726 xgetptr $
727 print (struct Lisp_Overlay *) $ptr
728 end
729 document xoverlay
730 Print $ as a overlay pointer.
731 This command assumes that $ is an Emacs Lisp overlay value.
732 end
733
734 define xmiscfree
735 xgetptr $
736 print (struct Lisp_Free *) $ptr
737 end
738 document xmiscfree
739 Print $ as a misc free-cell pointer.
740 This command assumes that $ is an Emacs Lisp Misc value.
741 end
742
743 define xintfwd
744 xgetptr $
745 print (struct Lisp_Intfwd *) $ptr
746 end
747 document xintfwd
748 Print $ as an integer forwarding pointer.
749 This command assumes that $ is an Emacs Lisp Misc value.
750 end
751
752 define xboolfwd
753 xgetptr $
754 print (struct Lisp_Boolfwd *) $ptr
755 end
756 document xboolfwd
757 Print $ as a boolean forwarding pointer.
758 This command assumes that $ is an Emacs Lisp Misc value.
759 end
760
761 define xobjfwd
762 xgetptr $
763 print (struct Lisp_Objfwd *) $ptr
764 end
765 document xobjfwd
766 Print $ as an object forwarding pointer.
767 This command assumes that $ is an Emacs Lisp Misc value.
768 end
769
770 define xbufobjfwd
771 xgetptr $
772 print (struct Lisp_Buffer_Objfwd *) $ptr
773 end
774 document xbufobjfwd
775 Print $ as a buffer-local object forwarding pointer.
776 This command assumes that $ is an Emacs Lisp Misc value.
777 end
778
779 define xkbobjfwd
780 xgetptr $
781 print (struct Lisp_Kboard_Objfwd *) $ptr
782 end
783 document xkbobjfwd
784 Print $ as a kboard-local object forwarding pointer.
785 This command assumes that $ is an Emacs Lisp Misc value.
786 end
787
788 define xbuflocal
789 xgetptr $
790 print (struct Lisp_Buffer_Local_Value *) $ptr
791 end
792 document xbuflocal
793 Print $ as a buffer-local-value pointer.
794 This command assumes that $ is an Emacs Lisp Misc value.
795 end
796
797 define xsymbol
798 set $sym = $
799 xgetptr $sym
800 print (struct Lisp_Symbol *) $ptr
801 xprintsym $sym
802 echo \n
803 end
804 document xsymbol
805 Print the name and address of the symbol $.
806 This command assumes that $ is an Emacs Lisp symbol value.
807 end
808
809 define xstring
810 xgetptr $
811 print (struct Lisp_String *) $ptr
812 xprintstr $
813 echo \n
814 end
815 document xstring
816 Print the contents and address of the string $.
817 This command assumes that $ is an Emacs Lisp string value.
818 end
819
820 define xvector
821 xgetptr $
822 print (struct Lisp_Vector *) $ptr
823 output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
824 echo \n
825 end
826 document xvector
827 Print the contents and address of the vector $.
828 This command assumes that $ is an Emacs Lisp vector value.
829 end
830
831 define xprocess
832 xgetptr $
833 print (struct Lisp_Process *) $ptr
834 output *$
835 echo \n
836 end
837 document xprocess
838 Print the address of the struct Lisp_process to which $ points.
839 This command assumes that $ is a Lisp_Object.
840 end
841
842 define xframe
843 xgetptr $
844 print (struct frame *) $ptr
845 xgetptr $->name
846 set $ptr = (struct Lisp_String *) $ptr
847 xprintstr $ptr
848 echo \n
849 end
850 document xframe
851 Print $ as a frame pointer.
852 This command assumes $ is an Emacs Lisp frame value.
853 end
854
855 define xcompiled
856 xgetptr $
857 print (struct Lisp_Vector *) $ptr
858 output ($->contents[0])@($->size & 0xff)
859 end
860 document xcompiled
861 Print $ as a compiled function pointer.
862 This command assumes that $ is an Emacs Lisp compiled value.
863 end
864
865 define xwindow
866 xgetptr $
867 print (struct window *) $ptr
868 set $window = (struct window *) $ptr
869 xgetint $window->total_cols
870 set $width=$int
871 xgetint $window->total_lines
872 set $height=$int
873 xgetint $window->left_col
874 set $left=$int
875 xgetint $window->top_line
876 set $top=$int
877 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
878 end
879 document xwindow
880 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
881 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
882 end
883
884 define xwinconfig
885 xgetptr $
886 print (struct save_window_data *) $ptr
887 end
888 document xwinconfig
889 Print $ as a window configuration pointer.
890 This command assumes that $ is an Emacs Lisp window configuration value.
891 end
892
893 define xsubr
894 xgetptr $
895 print (struct Lisp_Subr *) $ptr
896 output *$
897 echo \n
898 end
899 document xsubr
900 Print the address of the subr which the Lisp_Object $ points to.
901 end
902
903 define xchartable
904 xgetptr $
905 print (struct Lisp_Char_Table *) $ptr
906 printf "Purpose: "
907 xprintsym $->purpose
908 printf " %d extra slots", ($->size & 0x1ff) - 68
909 echo \n
910 end
911 document xchartable
912 Print the address of the char-table $, and its purpose.
913 This command assumes that $ is an Emacs Lisp char-table value.
914 end
915
916 define xsubchartable
917 xgetptr $
918 print (struct Lisp_Sub_Char_Table *) $ptr
919 xgetint $->depth
920 set $depth = $int
921 xgetint $->min_char
922 printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
923 end
924 document xsubchartable
925 Print the address of the sub-char-table $, its depth and min-char.
926 This command assumes that $ is an Emacs Lisp sub-char-table value.
927 end
928
929 define xboolvector
930 xgetptr $
931 print (struct Lisp_Bool_Vector *) $ptr
932 output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
933 echo \n
934 end
935 document xboolvector
936 Print the contents and address of the bool-vector $.
937 This command assumes that $ is an Emacs Lisp bool-vector value.
938 end
939
940 define xbuffer
941 xgetptr $
942 print (struct buffer *) $ptr
943 xgetptr $->name
944 output ((struct Lisp_String *) $ptr)->data
945 echo \n
946 end
947 document xbuffer
948 Set $ as a buffer pointer and the name of the buffer.
949 This command assumes $ is an Emacs Lisp buffer value.
950 end
951
952 define xhashtable
953 xgetptr $
954 print (struct Lisp_Hash_Table *) $ptr
955 end
956 document xhashtable
957 Set $ as a hash table pointer.
958 This command assumes that $ is an Emacs Lisp hash table value.
959 end
960
961 define xcons
962 xgetptr $
963 print (struct Lisp_Cons *) $ptr
964 output/x *$
965 echo \n
966 end
967 document xcons
968 Print the contents of $ as an Emacs Lisp cons.
969 end
970
971 define nextcons
972 p $.u.cdr
973 xcons
974 end
975 document nextcons
976 Print the contents of the next cell in a list.
977 This command assumes that the last thing you printed was a cons cell contents
978 (type struct Lisp_Cons) or a pointer to one.
979 end
980 define xcar
981 xgetptr $
982 xgettype $
983 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
984 end
985 document xcar
986 Assume that $ is an Emacs Lisp pair and print its car.
987 end
988
989 define xcdr
990 xgetptr $
991 xgettype $
992 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
993 end
994 document xcdr
995 Assume that $ is an Emacs Lisp pair and print its cdr.
996 end
997
998 define xlist
999 xgetptr $
1000 set $cons = (struct Lisp_Cons *) $ptr
1001 xgetptr Qnil
1002 set $nil = $ptr
1003 set $i = 0
1004 while $cons != $nil && $i < 10
1005 p/x $cons->car
1006 xpr
1007 xgetptr $cons->u.cdr
1008 set $cons = (struct Lisp_Cons *) $ptr
1009 set $i = $i + 1
1010 printf "---\n"
1011 end
1012 if $cons == $nil
1013 printf "nil\n"
1014 else
1015 printf "...\n"
1016 p $ptr
1017 end
1018 end
1019 document xlist
1020 Print $ assuming it is a list.
1021 end
1022
1023 define xfloat
1024 xgetptr $
1025 print ((struct Lisp_Float *) $ptr)->u.data
1026 end
1027 document xfloat
1028 Print $ assuming it is a lisp floating-point number.
1029 end
1030
1031 define xscrollbar
1032 xgetptr $
1033 print (struct scrollbar *) $ptr
1034 output *$
1035 echo \n
1036 end
1037 document xscrollbar
1038 Print $ as a scrollbar pointer.
1039 end
1040
1041 define xpr
1042 xtype
1043 if $type == Lisp_Int
1044 xint
1045 end
1046 if $type == Lisp_Symbol
1047 xsymbol
1048 end
1049 if $type == Lisp_String
1050 xstring
1051 end
1052 if $type == Lisp_Cons
1053 xcons
1054 end
1055 if $type == Lisp_Float
1056 xfloat
1057 end
1058 if $type == Lisp_Misc
1059 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1060 if $misc == Lisp_Misc_Free
1061 xmiscfree
1062 end
1063 if $misc == Lisp_Misc_Boolfwd
1064 xboolfwd
1065 end
1066 if $misc == Lisp_Misc_Marker
1067 xmarker
1068 end
1069 if $misc == Lisp_Misc_Intfwd
1070 xintfwd
1071 end
1072 if $misc == Lisp_Misc_Boolfwd
1073 xboolfwd
1074 end
1075 if $misc == Lisp_Misc_Objfwd
1076 xobjfwd
1077 end
1078 if $misc == Lisp_Misc_Buffer_Objfwd
1079 xbufobjfwd
1080 end
1081 if $misc == Lisp_Misc_Buffer_Local_Value
1082 xbuflocal
1083 end
1084 # if $misc == Lisp_Misc_Some_Buffer_Local_Value
1085 # xvalue
1086 # end
1087 if $misc == Lisp_Misc_Overlay
1088 xoverlay
1089 end
1090 if $misc == Lisp_Misc_Kboard_Objfwd
1091 xkbobjfwd
1092 end
1093 # if $misc == Lisp_Misc_Save_Value
1094 # xsavevalue
1095 # end
1096 end
1097 if $type == Lisp_Vectorlike
1098 set $size = ((struct Lisp_Vector *) $ptr)->size
1099 if ($size & PVEC_FLAG)
1100 set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1101 if $vec == PVEC_NORMAL_VECTOR
1102 xvector
1103 end
1104 if $vec == PVEC_PROCESS
1105 xprocess
1106 end
1107 if $vec == PVEC_FRAME
1108 xframe
1109 end
1110 if $vec == PVEC_COMPILED
1111 xcompiled
1112 end
1113 if $vec == PVEC_WINDOW
1114 xwindow
1115 end
1116 if $vec == PVEC_WINDOW_CONFIGURATION
1117 xwinconfig
1118 end
1119 if $vec == PVEC_SUBR
1120 xsubr
1121 end
1122 if $vec == PVEC_CHAR_TABLE
1123 xchartable
1124 end
1125 if $vec == PVEC_BOOL_VECTOR
1126 xboolvector
1127 end
1128 if $vec == PVEC_BUFFER
1129 xbuffer
1130 end
1131 if $vec == PVEC_HASH_TABLE
1132 xhashtable
1133 end
1134 else
1135 xvector
1136 end
1137 end
1138 end
1139 document xpr
1140 Print $ as a lisp object of any type.
1141 end
1142
1143 define xprintstr
1144 set $data = (char *) $arg0->data
1145 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1146 end
1147
1148 define xprintsym
1149 xgetptr $arg0
1150 set $sym = (struct Lisp_Symbol *) $ptr
1151 xgetptr $sym->xname
1152 set $sym_name = (struct Lisp_String *) $ptr
1153 xprintstr $sym_name
1154 end
1155 document xprintsym
1156 Print argument as a symbol.
1157 end
1158
1159 define xcoding
1160 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1161 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1162 set $name = $tmp->contents[$arg0 * 2]
1163 print $name
1164 pr
1165 print $tmp->contents[$arg0 * 2 + 1]
1166 pr
1167 end
1168 document xcoding
1169 Print the name and attributes of coding system that has ID (argument).
1170 end
1171
1172 define xcharset
1173 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1174 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1175 p $tmp->contents[charset_table[$arg0].hash_index * 2]
1176 pr
1177 end
1178 document xcharset
1179 Print the name of charset that has ID (argument).
1180 end
1181
1182 define xfontset
1183 xgetptr $
1184 set $tbl = (struct Lisp_Char_Table *) $ptr
1185 print $tbl
1186 xgetint $tbl->extras[0]
1187 printf " ID:%d", $int
1188 xgettype $tbl->extras[1]
1189 xgetptr $tbl->extras[1]
1190 if $type == Lisp_String
1191 set $ptr = (struct Lisp_String *) $ptr
1192 printf " Name:"
1193 xprintstr $ptr
1194 else
1195 xgetptr $tbl->extras[2]
1196 set $ptr = (struct Lisp_Char_Table *) $ptr
1197 xgetptr $ptr->extras[1]
1198 set $ptr = (struct Lisp_String *) $ptr
1199 printf " Realized from:"
1200 xprintstr $ptr
1201 end
1202 echo \n
1203 end
1204
1205 define xfont
1206 xgetptr $
1207 set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1208 if $size == FONT_SPEC_MAX
1209 print (struct font_spec *) $ptr
1210 else
1211 if $size == FONT_ENTITY_MAX
1212 print (struct font_entity *) $ptr
1213 else
1214 print (struct font *) $ptr
1215 end
1216 end
1217 end
1218 document xfont
1219 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1220 end
1221
1222 define xbacktrace
1223 set $bt = backtrace_list
1224 while $bt
1225 xgettype (*$bt->function)
1226 if $type == Lisp_Symbol
1227 xprintsym (*$bt->function)
1228 printf " (0x%x)\n", $bt->args
1229 else
1230 xgetptr *$bt->function
1231 printf "0x%x ", $ptr
1232 if $type == Lisp_Vectorlike
1233 xgetptr (*$bt->function)
1234 set $size = ((struct Lisp_Vector *) $ptr)->size
1235 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1236 else
1237 printf "Lisp type %d", $type
1238 end
1239 echo \n
1240 end
1241 set $bt = $bt->next
1242 end
1243 end
1244 document xbacktrace
1245 Print a backtrace of Lisp function calls from backtrace_list.
1246 Set a breakpoint at Fsignal and call this to see from where
1247 an error was signaled.
1248 end
1249
1250 define which
1251 set debug_print (which_symbols ($arg0))
1252 end
1253 document which
1254 Print symbols which references a given lisp object
1255 either as its symbol value or symbol function.
1256 end
1257
1258 define xbytecode
1259 set $bt = byte_stack_list
1260 while $bt
1261 xgettype ($bt->byte_string)
1262 printf "0x%x => ", $bt->byte_string
1263 which $bt->byte_string
1264 set $bt = $bt->next
1265 end
1266 end
1267 document xbytecode
1268 Print a backtrace of the byte code stack.
1269 end
1270
1271 # Show Lisp backtrace after normal backtrace.
1272 define hookpost-backtrace
1273 set $bt = backtrace_list
1274 if $bt
1275 echo \n
1276 echo Lisp Backtrace:\n
1277 xbacktrace
1278 end
1279 end
1280
1281 define xreload
1282 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1283 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1284 end
1285 document xreload
1286 When starting Emacs a second time in the same gdb session under
1287 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1288 their values. (The same happens on current (2000) versions of GNU/Linux
1289 with gdb 5.0.)
1290 This function reloads them.
1291 end
1292 xreload
1293
1294 # Flush display (X only)
1295 define ff
1296 set x_flush (0)
1297 end
1298 document ff
1299 Flush pending X window display updates to screen.
1300 Works only when an inferior emacs is executing.
1301 end
1302
1303
1304 define hook-run
1305 xreload
1306 end
1307
1308 # Call xreload if a new Emacs executable is loaded.
1309 define hookpost-run
1310 xreload
1311 end
1312
1313 set print pretty on
1314 set print sevenbit-strings
1315
1316 show environment DISPLAY
1317 show environment TERM
1318
1319 # People get bothered when they see messages about non-existent functions...
1320 xgetptr Vsystem_type
1321 # $ptr is NULL in temacs
1322 if ($ptr != 0)
1323 set $tem = (struct Lisp_Symbol *) $ptr
1324 xgetptr $tem->xname
1325 set $tem = (struct Lisp_String *) $ptr
1326 set $tem = (char *) $tem->data
1327
1328 # Don't let abort actually run, as it will make stdio stop working and
1329 # therefore the `pr' command above as well.
1330 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1331 # The windows-nt build replaces abort with its own function.
1332 break w32_abort
1333 else
1334 break abort
1335 end
1336 end
1337
1338 # x_error_quitter is defined only on X. But window-system is set up
1339 # only at run time, during Emacs startup, so we need to defer setting
1340 # the breakpoint. init_sys_modes is the first function called on
1341 # every platform after init_display, where window-system is set.
1342 tbreak init_sys_modes
1343 commands
1344 silent
1345 xgetptr Vinitial_window_system
1346 set $tem = (struct Lisp_Symbol *) $ptr
1347 xgetptr $tem->xname
1348 set $tem = (struct Lisp_String *) $ptr
1349 set $tem = (char *) $tem->data
1350 # If we are running in synchronous mode, we want a chance to look
1351 # around before Emacs exits. Perhaps we should put the break
1352 # somewhere else instead...
1353 if $tem[0] == 'x' && $tem[1] == '\0'
1354 break x_error_quitter
1355 end
1356 continue
1357 end
1358 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe