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