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