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