Merge from emacs-24; up to 2012-12-06T01:39:03Z!monnier@iro.umontreal.ca
[bpt/emacs.git] / src / .gdbinit
CommitLineData
ab422c4d 1# Copyright (C) 1992-1998, 2000-2013 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
1781b9e9 52 set $ptr = ($bugfix & VALMASK) | DATA_SEG_BITS
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
1781b9e9 70 set $type = (enum Lisp_Type) (USE_LSB_TAG ? $bugfix & (1 << GCTYPEBITS) - 1 : $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
361 xgetint $w->sequence_number
362 if ($w->mini_p != Qnil)
363 printf "Mini "
364 end
365 printf "Window %d ", $int
366 xgetptr $w->buffer
367 set $tem = (struct buffer *) $ptr
c40f8d15 368 xgetptr $tem->name_
afca296c
KS
369 printf "%s", ((struct Lisp_String *) $ptr)->data
370 printf "\n"
371 xgetptr $w->start
372 set $tem = (struct Lisp_Marker *) $ptr
373 printf "start=%d end:", $tem->charpos
374 if ($w->window_end_valid != Qnil)
375 xgetint $w->window_end_pos
376 printf "pos=%d", $int
377 xgetint $w->window_end_vpos
378 printf " vpos=%d", $int
379 else
380 printf "invalid"
381 end
382 printf " vscroll=%d", $w->vscroll
383 if ($w->force_start != Qnil)
384 printf " FORCE_START"
385 end
386 if ($w->must_be_updated_p)
387 printf " MUST_UPD"
388 end
389 printf "\n"
390 printf "cursor: "
391 pcursorx $w->cursor
392 printf " phys: "
393 pcursorx $w->phys_cursor
394 if ($w->phys_cursor_on_p)
395 printf " ON"
396 else
397 printf " OFF"
398 end
399 printf " blk="
400 if ($w->last_cursor_off_p != $w->cursor_off_p)
401 if ($w->last_cursor_off_p)
402 printf "ON->"
403 else
404 printf "OFF->"
405 end
406 end
407 if ($w->cursor_off_p)
408 printf "ON"
409 else
410 printf "OFF"
411 end
412 printf "\n"
413end
414document pwinx
415Pretty print a window structure.
89955f2e 416Takes one argument, a pointer to a window structure.
afca296c
KS
417end
418
419define pwin
420 pwinx w
421end
422document pwin
423Pretty print window structure w.
424end
425
bc5a45f3 426define pbiditype
9443b3c7
EZ
427 if ($arg0 == 0)
428 printf "UNDEF"
429 end
bc5a45f3
EZ
430 if ($arg0 == 1)
431 printf "L"
432 end
433 if ($arg0 == 2)
434 printf "R"
435 end
436 if ($arg0 == 3)
437 printf "EN"
438 end
439 if ($arg0 == 4)
440 printf "AN"
441 end
442 if ($arg0 == 5)
443 printf "BN"
444 end
445 if ($arg0 == 6)
446 printf "B"
447 end
9443b3c7 448 if ($arg0 < 0 || $arg0 > 6)
bc5a45f3
EZ
449 printf "%d??", $arg0
450 end
451end
452document pbiditype
453Print textual description of bidi type given as first argument.
454end
455
1e99743b
KS
456define pgx
457 set $g = $arg0
be996d82 458 # CHAR_GLYPH
a1674f0b
EZ
459 if ($g.type == 0)
460 if ($g.u.ch >= ' ' && $g.u.ch < 127)
461 printf "CHAR[%c]", $g.u.ch
1e99743b 462 else
a1674f0b 463 printf "CHAR[0x%x]", $g.u.ch
1e99743b
KS
464 end
465 end
be996d82 466 # COMPOSITE_GLYPH
a1674f0b
EZ
467 if ($g.type == 1)
468 printf "COMP[%d (%d..%d)]", $g.u.cmp.id, $g.slice.cmp.from, $g.slice.cmp.to
1e99743b 469 end
0eb025fb 470 # GLYPHLESS_GLYPH
a1674f0b 471 if ($g.type == 2)
0eb025fb 472 printf "GLYPHLESS["
a1674f0b 473 if ($g.u.glyphless.method == 0)
0eb025fb
EZ
474 printf "THIN]"
475 end
a1674f0b 476 if ($g.u.glyphless.method == 1)
0eb025fb
EZ
477 printf "EMPTY]"
478 end
a1674f0b 479 if ($g.u.glyphless.method == 2)
0eb025fb
EZ
480 printf "ACRO]"
481 end
a1674f0b 482 if ($g.u.glyphless.method == 3)
0eb025fb
EZ
483 printf "HEX]"
484 end
485 end
486 # IMAGE_GLYPH
a1674f0b
EZ
487 if ($g.type == 3)
488 printf "IMAGE[%d]", $g.u.img_id
1e99743b 489 end
be996d82 490 # STRETCH_GLYPH
a1674f0b
EZ
491 if ($g.type == 4)
492 printf "STRETCH[%d+%d]", $g.u.stretch.height, $g.u.stretch.ascent
1e99743b 493 end
a1674f0b 494 xgettype ($g.object)
1e99743b 495 if ($type == Lisp_String)
8654a41b
EZ
496 xgetptr $g.object
497 printf " str=0x%x[%d]", ((struct Lisp_String *)$ptr)->data, $g.charpos
1e99743b 498 else
a1674f0b 499 printf " pos=%d", $g.charpos
1e99743b 500 end
bc5a45f3 501 # For characters, print their resolved level and bidi type
a1674f0b
EZ
502 if ($g.type == 0)
503 printf " blev=%d,btyp=", $g.resolved_level
504 pbiditype $g.bidi_type
bc5a45f3 505 end
a1674f0b 506 printf " w=%d a+d=%d+%d", $g.pixel_width, $g.ascent, $g.descent
be996d82 507 # If not DEFAULT_FACE_ID
a1674f0b
EZ
508 if ($g.face_id != 0)
509 printf " face=%d", $g.face_id
1e99743b 510 end
a1674f0b
EZ
511 if ($g.voffset)
512 printf " vof=%d", $g.voffset
1e99743b 513 end
a1674f0b 514 if ($g.multibyte_p)
1e99743b
KS
515 printf " MB"
516 end
a1674f0b 517 if ($g.padding_p)
1e99743b
KS
518 printf " PAD"
519 end
a1674f0b 520 if ($g.glyph_not_available_p)
1e99743b
KS
521 printf " N/A"
522 end
a1674f0b 523 if ($g.overlaps_vertically_p)
1e99743b
KS
524 printf " OVL"
525 end
a1674f0b 526 if ($g.avoid_cursor_p)
cb4545ad
EZ
527 printf " AVOID"
528 end
a1674f0b 529 if ($g.left_box_line_p)
1e99743b
KS
530 printf " ["
531 end
a1674f0b 532 if ($g.right_box_line_p)
1e99743b
KS
533 printf " ]"
534 end
a1674f0b
EZ
535 if ($g.slice.img.x || $g.slice.img.y || $g.slice.img.width || $g.slice.img.height)
536 printf " slice=%d,%d,%d,%d" ,$g.slice.img.x, $g.slice.img.y, $g.slice.img.width, $g.slice.img.height
1e99743b
KS
537 end
538 printf "\n"
539end
540document pgx
541Pretty print a glyph structure.
89955f2e 542Takes one argument, a pointer to a glyph structure.
1e99743b
KS
543end
544
545define pg
546 set $pgidx = 0
547 pgx glyph
548end
549document pg
550Pretty print glyph structure glyph.
551end
552
553define pgi
554 set $pgidx = $arg0
555 pgx (&glyph[$pgidx])
556end
557document pgi
558Pretty print glyph structure glyph[I].
559Takes one argument, a integer I.
560end
561
562define pgn
563 set $pgidx = $pgidx + 1
564 pgx (&glyph[$pgidx])
565end
566document pgn
567Pretty print next glyph structure.
568end
569
570define pgrowx
571 set $row = $arg0
572 set $area = 0
573 set $xofs = $row->x
574 while ($area < 3)
575 set $used = $row->used[$area]
576 if ($used > 0)
577 set $gl0 = $row->glyphs[$area]
578 set $pgidx = 0
579 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
580 while ($pgidx < $used)
581 printf "%3d %4d: ", $pgidx, $xofs
582 pgx $gl0[$pgidx]
583 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
584 set $pgidx = $pgidx + 1
585 end
586 end
587 set $area = $area + 1
588 end
589end
590document pgrowx
591Pretty print all glyphs in a row structure.
592Takes one argument, a pointer to a row structure.
593end
594
595define pgrow
596 pgrowx row
597end
598document pgrow
599Pretty print all glyphs in row structure row.
600end
afca296c 601
be996d82
EZ
602define pgrowit
603 pgrowx it->glyph_row
604end
605document pgrowit
606Pretty print all glyphs in it->glyph_row.
607end
608
f866d742 609define prowlims
0416466c 610 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
f866d742
EZ
611end
612document prowlims
613Print important attributes of a glyph_row structure.
614Takes one argument, a pointer to a glyph_row structure.
615end
616
617define pmtxrows
618 set $mtx = $arg0
619 set $gl = $mtx->rows
0416466c
EZ
620 set $glend = $mtx->rows + $mtx->nrows - 1
621 set $i = 0
f866d742 622 while ($gl < $glend)
0416466c 623 printf "%d: ", $i
f866d742
EZ
624 prowlims $gl
625 set $gl = $gl + 1
0416466c 626 set $i = $i + 1
f866d742
EZ
627 end
628end
629document pmtxrows
630Print data about glyph rows in a glyph matrix.
631Takes one argument, a pointer to a glyph_matrix structure.
632end
633
a6ffc6a2 634define xtype
6b61353c
KH
635 xgettype $
636 output $type
637 echo \n
638 if $type == Lisp_Misc
639 xmisctype
640 else
641 if $type == Lisp_Vectorlike
642 xvectype
643 end
644 end
a6ffc6a2 645end
e065a56e 646document xtype
ba1e23bf 647Print the type of $, assuming it is an Emacs Lisp value.
3fe8bda5 648If the first type printed is Lisp_Vector or Lisp_Misc,
6b61353c 649a second line gives the more precise type.
3fe8bda5
RS
650end
651
7d377c48
DA
652define pvectype
653 set $size = ((struct Lisp_Vector *) $arg0)->header.size
c20fdd9e 654 if ($size & PSEUDOVECTOR_FLAG)
914adc42 655 output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS)
c20fdd9e 656 else
914adc42 657 output PVEC_NORMAL_VECTOR
c20fdd9e 658 end
6b61353c 659 echo \n
3fe8bda5 660end
7d377c48
DA
661document pvectype
662Print the subtype of vectorlike object.
663Takes one argument, a pointer to an object.
914adc42
DA
664end
665
7d377c48 666define xvectype
914adc42 667 xgetptr $
7d377c48
DA
668 pvectype $ptr
669end
670document xvectype
671Print the subtype of vectorlike object.
672This command assumes that $ is a Lisp_Object.
673end
674
675define pvecsize
676 set $size = ((struct Lisp_Vector *) $arg0)->header.size
914adc42
DA
677 if ($size & PSEUDOVECTOR_FLAG)
678 output ($size & PSEUDOVECTOR_SIZE_MASK)
679 echo \n
680 output (($size & PSEUDOVECTOR_REST_MASK) >> PSEUDOVECTOR_SIZE_BITS)
681 else
682 output ($size & ~ARRAY_MARK_FLAG)
683 end
684 echo \n
685end
7d377c48
DA
686document pvecsize
687Print the size of vectorlike object.
688Takes one argument, a pointer to an object.
689end
690
691define xvecsize
692 xgetptr $
693 pvecsize $ptr
694end
914adc42 695document xvecsize
7d377c48
DA
696Print the size of $
697This command assumes that $ is a Lisp_Object.
3fe8bda5
RS
698end
699
700define xmisctype
6b61353c
KH
701 xgetptr $
702 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
703 echo \n
3fe8bda5
RS
704end
705document xmisctype
2d5ed88d 706Assume that $ is some misc type and print its specific type.
e065a56e 707end
a6ffc6a2
JB
708
709define xint
6b61353c
KH
710 xgetint $
711 print $int
a6ffc6a2 712end
e065a56e 713document xint
2d5ed88d 714Print $ as an Emacs Lisp integer. This gets the sign right.
e065a56e 715end
a6ffc6a2
JB
716
717define xptr
6b61353c
KH
718 xgetptr $
719 print (void *) $ptr
a6ffc6a2 720end
e065a56e 721document xptr
2d5ed88d 722Print the pointer portion of an Emacs Lisp value in $.
e065a56e 723end
a6ffc6a2 724
a6ffc6a2 725define xmarker
6b61353c
KH
726 xgetptr $
727 print (struct Lisp_Marker *) $ptr
a6ffc6a2 728end
e065a56e 729document xmarker
2d5ed88d
EZ
730Print $ as a marker pointer.
731This command assumes that $ is an Emacs Lisp marker value.
e065a56e 732end
a6ffc6a2 733
a6a3acf0 734define xoverlay
6b61353c
KH
735 xgetptr $
736 print (struct Lisp_Overlay *) $ptr
a6a3acf0
KH
737end
738document xoverlay
89955f2e
NR
739Print $ as a overlay pointer.
740This command assumes that $ is an Emacs Lisp overlay value.
a6a3acf0
KH
741end
742
743define xmiscfree
6b61353c
KH
744 xgetptr $
745 print (struct Lisp_Free *) $ptr
a6a3acf0
KH
746end
747document xmiscfree
89955f2e
NR
748Print $ as a misc free-cell pointer.
749This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
750end
751
a6ffc6a2 752define xsymbol
cfcde636
KS
753 set $sym = $
754 xgetptr $sym
6b61353c 755 print (struct Lisp_Symbol *) $ptr
cfcde636 756 xprintsym $sym
6b61353c 757 echo \n
a6ffc6a2 758end
e065a56e
JB
759document xsymbol
760Print the name and address of the symbol $.
ba1e23bf 761This command assumes that $ is an Emacs Lisp symbol value.
e065a56e 762end
a6ffc6a2
JB
763
764define xstring
6b61353c
KH
765 xgetptr $
766 print (struct Lisp_String *) $ptr
0001e968 767 xprintstr $
6b61353c 768 echo \n
a6ffc6a2 769end
a6ffc6a2 770document xstring
e065a56e 771Print the contents and address of the string $.
ba1e23bf 772This command assumes that $ is an Emacs Lisp string value.
a6ffc6a2
JB
773end
774
775define xvector
6b61353c
KH
776 xgetptr $
777 print (struct Lisp_Vector *) $ptr
1781b9e9 778 output ($->header.size > 50) ? 0 : ($->contents[0])@($->header.size & ~ARRAY_MARK_FLAG)
ef15f270 779echo \n
a6ffc6a2 780end
a6ffc6a2 781document xvector
e065a56e 782Print the contents and address of the vector $.
ba1e23bf 783This command assumes that $ is an Emacs Lisp vector value.
a6ffc6a2
JB
784end
785
14a8902a 786define xprocess
6b61353c
KH
787 xgetptr $
788 print (struct Lisp_Process *) $ptr
789 output *$
790 echo \n
14a8902a
RS
791end
792document xprocess
89955f2e
NR
793Print the address of the struct Lisp_process to which $ points.
794This command assumes that $ is a Lisp_Object.
14a8902a
RS
795end
796
ec558adc 797define xframe
6b61353c
KH
798 xgetptr $
799 print (struct frame *) $ptr
26d16b35 800 xgetptr $->name
28c1e1ca
KS
801 set $ptr = (struct Lisp_String *) $ptr
802 xprintstr $ptr
803 echo \n
a6ffc6a2 804end
ec558adc 805document xframe
2d5ed88d
EZ
806Print $ as a frame pointer.
807This command assumes $ is an Emacs Lisp frame value.
e065a56e 808end
a6ffc6a2 809
14a8902a 810define xcompiled
6b61353c
KH
811 xgetptr $
812 print (struct Lisp_Vector *) $ptr
cc7245e4 813 output ($->contents[0])@($->header.size & 0xff)
14a8902a
RS
814end
815document xcompiled
89955f2e
NR
816Print $ as a compiled function pointer.
817This command assumes that $ is an Emacs Lisp compiled value.
14a8902a
RS
818end
819
820define xwindow
6b61353c
KH
821 xgetptr $
822 print (struct window *) $ptr
25d34643 823 set $window = (struct window *) $ptr
26d16b35 824 xgetint $window->total_cols
25d34643 825 set $width=$int
26d16b35 826 xgetint $window->total_lines
25d34643 827 set $height=$int
26d16b35 828 xgetint $window->left_col
25d34643 829 set $left=$int
26d16b35 830 xgetint $window->top_line
25d34643
RS
831 set $top=$int
832 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
14a8902a
RS
833end
834document xwindow
835Print $ as a window pointer, assuming it is an Emacs Lisp window value.
836Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
837end
838
029c56f6 839define xwinconfig
6b61353c
KH
840 xgetptr $
841 print (struct save_window_data *) $ptr
a6a3acf0 842end
029c56f6 843document xwinconfig
89955f2e
NR
844Print $ as a window configuration pointer.
845This command assumes that $ is an Emacs Lisp window configuration value.
a6a3acf0
KH
846end
847
14a8902a 848define xsubr
6b61353c
KH
849 xgetptr $
850 print (struct Lisp_Subr *) $ptr
851 output *$
852 echo \n
a6a3acf0 853end
14a8902a
RS
854document xsubr
855Print the address of the subr which the Lisp_Object $ points to.
856end
857
858define xchartable
6b61353c
KH
859 xgetptr $
860 print (struct Lisp_Char_Table *) $ptr
861 printf "Purpose: "
862 xprintsym $->purpose
cc7245e4 863 printf " %d extra slots", ($->header.size & 0x1ff) - 68
6b61353c 864 echo \n
14a8902a
RS
865end
866document xchartable
867Print the address of the char-table $, and its purpose.
868This command assumes that $ is an Emacs Lisp char-table value.
869end
870
d1da276f
EZ
871define xsubchartable
872 xgetptr $
873 print (struct Lisp_Sub_Char_Table *) $ptr
874 xgetint $->depth
875 set $depth = $int
876 xgetint $->min_char
877 printf "Depth: %d, Min char: %d (0x%x)\n", $depth, $int, $int
878end
879document xsubchartable
880Print the address of the sub-char-table $, its depth and min-char.
881This command assumes that $ is an Emacs Lisp sub-char-table value.
882end
883
14a8902a 884define xboolvector
6b61353c
KH
885 xgetptr $
886 print (struct Lisp_Bool_Vector *) $ptr
1781b9e9 887 output ($->size > 256) ? 0 : ($->data[0])@(($->size + BOOL_VECTOR_BITS_PER_CHAR - 1)/ BOOL_VECTOR_BITS_PER_CHAR)
6b61353c 888 echo \n
14a8902a
RS
889end
890document xboolvector
891Print the contents and address of the bool-vector $.
892This command assumes that $ is an Emacs Lisp bool-vector value.
893end
894
895define xbuffer
6b61353c
KH
896 xgetptr $
897 print (struct buffer *) $ptr
c40f8d15 898 xgetptr $->name_
6b61353c
KH
899 output ((struct Lisp_String *) $ptr)->data
900 echo \n
14a8902a
RS
901end
902document xbuffer
2d5ed88d
EZ
903Set $ as a buffer pointer and the name of the buffer.
904This command assumes $ is an Emacs Lisp buffer value.
a6a3acf0
KH
905end
906
3266f62b 907define xhashtable
6b61353c
KH
908 xgetptr $
909 print (struct Lisp_Hash_Table *) $ptr
3266f62b
GM
910end
911document xhashtable
89955f2e
NR
912Set $ as a hash table pointer.
913This command assumes that $ is an Emacs Lisp hash table value.
3266f62b
GM
914end
915
a6ffc6a2 916define xcons
6b61353c
KH
917 xgetptr $
918 print (struct Lisp_Cons *) $ptr
919 output/x *$
920 echo \n
a6ffc6a2 921end
e065a56e 922document xcons
2d5ed88d 923Print the contents of $ as an Emacs Lisp cons.
e065a56e 924end
a6ffc6a2 925
6f493884 926define nextcons
26d16b35 927 p $.u.cdr
6b61353c 928 xcons
6f493884
RS
929end
930document nextcons
931Print the contents of the next cell in a list.
89955f2e 932This command assumes that the last thing you printed was a cons cell contents
6f493884
RS
933(type struct Lisp_Cons) or a pointer to one.
934end
a6ffc6a2 935define xcar
6b61353c
KH
936 xgetptr $
937 xgettype $
26d16b35 938 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
a6ffc6a2 939end
e065a56e 940document xcar
2d5ed88d 941Assume that $ is an Emacs Lisp pair and print its car.
e065a56e 942end
a6ffc6a2
JB
943
944define xcdr
6b61353c
KH
945 xgetptr $
946 xgettype $
26d16b35 947 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
a6ffc6a2 948end
e065a56e 949document xcdr
2d5ed88d 950Assume that $ is an Emacs Lisp pair and print its cdr.
e065a56e 951end
a6ffc6a2 952
28c1e1ca
KS
953define xlist
954 xgetptr $
955 set $cons = (struct Lisp_Cons *) $ptr
956 xgetptr Qnil
957 set $nil = $ptr
958 set $i = 0
959 while $cons != $nil && $i < 10
26d16b35 960 p/x $cons->car
28c1e1ca 961 xpr
26d16b35 962 xgetptr $cons->u.cdr
28c1e1ca
KS
963 set $cons = (struct Lisp_Cons *) $ptr
964 set $i = $i + 1
965 printf "---\n"
966 end
967 if $cons == $nil
968 printf "nil\n"
969 else
970 printf "...\n"
971 p $ptr
972 end
973end
974document xlist
975Print $ assuming it is a list.
976end
977
df86e57e 978define xfloat
6b61353c 979 xgetptr $
b4483658 980 print ((struct Lisp_Float *) $ptr)->u.data
df86e57e
JB
981end
982document xfloat
983Print $ assuming it is a lisp floating-point number.
984end
985
b2367490 986define xscrollbar
6b61353c
KH
987 xgetptr $
988 print (struct scrollbar *) $ptr
b2367490
JB
989output *$
990echo \n
991end
dec5f4e3 992document xscrollbar
b2367490
JB
993Print $ as a scrollbar pointer.
994end
995
28c1e1ca
KS
996define xpr
997 xtype
646b5f55
AS
998 if $type == Lisp_Int0 || $type == Lisp_Int1
999 xint
28c1e1ca
KS
1000 end
1001 if $type == Lisp_Symbol
1002 xsymbol
1003 end
1004 if $type == Lisp_String
1005 xstring
1006 end
1007 if $type == Lisp_Cons
1008 xcons
1009 end
1010 if $type == Lisp_Float
1011 xfloat
1012 end
1013 if $type == Lisp_Misc
1014 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
1015 if $misc == Lisp_Misc_Free
1016 xmiscfree
1017 end
28c1e1ca
KS
1018 if $misc == Lisp_Misc_Marker
1019 xmarker
1020 end
28c1e1ca
KS
1021 if $misc == Lisp_Misc_Overlay
1022 xoverlay
1023 end
28c1e1ca
KS
1024# if $misc == Lisp_Misc_Save_Value
1025# xsavevalue
1026# end
1027 end
1028 if $type == Lisp_Vectorlike
cc7245e4 1029 set $size = ((struct Lisp_Vector *) $ptr)->header.size
1781b9e9 1030 if ($size & PSEUDOVECTOR_FLAG)
914adc42 1031 set $vec = (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS)
28c1e1ca
KS
1032 if $vec == PVEC_NORMAL_VECTOR
1033 xvector
1034 end
1035 if $vec == PVEC_PROCESS
1036 xprocess
1037 end
1038 if $vec == PVEC_FRAME
1039 xframe
1040 end
1041 if $vec == PVEC_COMPILED
1042 xcompiled
1043 end
1044 if $vec == PVEC_WINDOW
1045 xwindow
1046 end
1047 if $vec == PVEC_WINDOW_CONFIGURATION
1048 xwinconfig
1049 end
1050 if $vec == PVEC_SUBR
1051 xsubr
1052 end
1053 if $vec == PVEC_CHAR_TABLE
1054 xchartable
1055 end
1056 if $vec == PVEC_BOOL_VECTOR
1057 xboolvector
1058 end
1059 if $vec == PVEC_BUFFER
1060 xbuffer
1061 end
1062 if $vec == PVEC_HASH_TABLE
1063 xhashtable
1064 end
1065 else
1066 xvector
1067 end
1068 end
1069end
1070document xpr
1071Print $ as a lisp object of any type.
1072end
1073
0001e968 1074define xprintstr
d3332249 1075 set $data = (char *) $arg0->data
1781b9e9 1076 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
0001e968
SM
1077end
1078
24b4d1bc 1079define xprintsym
6b61353c
KH
1080 xgetptr $arg0
1081 set $sym = (struct Lisp_Symbol *) $ptr
c644523b 1082 xgetptr $sym->name
6b61353c 1083 set $sym_name = (struct Lisp_String *) $ptr
0001e968 1084 xprintstr $sym_name
24b4d1bc
GM
1085end
1086document xprintsym
1087 Print argument as a symbol.
1088end
1089
d5fb9ac8 1090define xcoding
1781b9e9
PE
1091 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & VALMASK) | DATA_SEG_BITS)
1092 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
d5fb9ac8
KH
1093 set $name = $tmp->contents[$arg0 * 2]
1094 print $name
1095 pr
1096 print $tmp->contents[$arg0 * 2 + 1]
1097 pr
1098end
1099document xcoding
8f924df7 1100 Print the name and attributes of coding system that has ID (argument).
d5fb9ac8
KH
1101end
1102
1103define xcharset
1781b9e9
PE
1104 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & VALMASK) | DATA_SEG_BITS)
1105 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & VALMASK) | DATA_SEG_BITS)
af800dc0 1106 p $tmp->contents[charset_table[$arg0].hash_index * 2]
d5fb9ac8
KH
1107 pr
1108end
1109document xcharset
8f924df7 1110 Print the name of charset that has ID (argument).
d5fb9ac8
KH
1111end
1112
9e067dbc
KH
1113define xfontset
1114 xgetptr $
1115 set $tbl = (struct Lisp_Char_Table *) $ptr
1116 print $tbl
1117 xgetint $tbl->extras[0]
1118 printf " ID:%d", $int
1119 xgettype $tbl->extras[1]
1120 xgetptr $tbl->extras[1]
1121 if $type == Lisp_String
1122 set $ptr = (struct Lisp_String *) $ptr
1123 printf " Name:"
1124 xprintstr $ptr
1125 else
1126 xgetptr $tbl->extras[2]
1127 set $ptr = (struct Lisp_Char_Table *) $ptr
1128 xgetptr $ptr->extras[1]
1129 set $ptr = (struct Lisp_String *) $ptr
1130 printf " Realized from:"
1131 xprintstr $ptr
1132 end
1133 echo \n
1134end
1135
322081f1
KH
1136define xfont
1137 xgetptr $
cc7245e4 1138 set $size = (((struct Lisp_Vector *) $ptr)->header.size & 0x1FF)
322081f1
KH
1139 if $size == FONT_SPEC_MAX
1140 print (struct font_spec *) $ptr
1141 else
1142 if $size == FONT_ENTITY_MAX
1143 print (struct font_entity *) $ptr
1144 else
1145 print (struct font *) $ptr
1146 end
1147 end
1148end
1149document xfont
1150Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1151end
1152
24b4d1bc
GM
1153define xbacktrace
1154 set $bt = backtrace_list
177c0ea7 1155 while $bt
b43d62ae 1156 xgettype ($bt->function)
3176a27e 1157 if $type == Lisp_Symbol
b43d62ae 1158 xprintsym ($bt->function)
c51842ec 1159 printf " (0x%x)\n", $bt->args
3176a27e 1160 else
b43d62ae 1161 xgetptr $bt->function
cf07311b 1162 printf "0x%x ", $ptr
3176a27e 1163 if $type == Lisp_Vectorlike
b43d62ae 1164 xgetptr ($bt->function)
cc7245e4 1165 set $size = ((struct Lisp_Vector *) $ptr)->header.size
c20fdd9e 1166 if ($size & PSEUDOVECTOR_FLAG)
914adc42 1167 output (enum pvec_type) (($size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS)
c20fdd9e
PE
1168 else
1169 output $size & ~ARRAY_MARK_FLAG
1170 end
3176a27e
GM
1171 else
1172 printf "Lisp type %d", $type
1173 end
1174 echo \n
1175 end
24b4d1bc
GM
1176 set $bt = $bt->next
1177 end
1178end
1179document xbacktrace
1180 Print a backtrace of Lisp function calls from backtrace_list.
177c0ea7 1181 Set a breakpoint at Fsignal and call this to see from where
3176a27e 1182 an error was signaled.
24b4d1bc
GM
1183end
1184
8b058d44
EZ
1185define xprintbytestr
1186 set $data = (char *) $arg0->data
1187 printf "Bytecode: "
1781b9e9 1188 output/u ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~ARRAY_MARK_FLAG : $arg0->size_byte)
8b058d44
EZ
1189end
1190document xprintbytestr
1191 Print a string of byte code.
1192end
1193
1194define xwhichsymbols
1195 set $output_debug = print_output_debug_flag
1196 set print_output_debug_flag = 0
6b1319ce 1197 call safe_debug_print (which_symbols ($arg0, $arg1))
8b058d44 1198 set print_output_debug_flag = $output_debug
28c1e1ca 1199end
8b058d44 1200document xwhichsymbols
89955f2e 1201 Print symbols which references a given lisp object
28c1e1ca 1202 either as its symbol value or symbol function.
8b058d44
EZ
1203 Call with two arguments: the lisp object and the
1204 maximum number of symbols referencing it to produce.
28c1e1ca
KS
1205end
1206
1207define xbytecode
1208 set $bt = byte_stack_list
1209 while $bt
8b058d44
EZ
1210 xgetptr $bt->byte_string
1211 set $ptr = (struct Lisp_String *) $ptr
1212 xprintbytestr $ptr
1213 printf "\n0x%x => ", $bt->byte_string
1214 xwhichsymbols $bt->byte_string 5
28c1e1ca
KS
1215 set $bt = $bt->next
1216 end
1217end
1218document xbytecode
1219 Print a backtrace of the byte code stack.
1220end
1221
338fa84a
KS
1222# Show Lisp backtrace after normal backtrace.
1223define hookpost-backtrace
1224 set $bt = backtrace_list
1225 if $bt
1226 echo \n
1227 echo Lisp Backtrace:\n
1228 xbacktrace
1229 end
1230end
1231
6c5d0c52
KS
1232# Flush display (X only)
1233define ff
1234 set x_flush (0)
1235end
1236document ff
1237Flush pending X window display updates to screen.
1238Works only when an inferior emacs is executing.
1239end
1240
1241
e065a56e 1242set print pretty on
df86e57e 1243set print sevenbit-strings
a6ffc6a2 1244
e5d77022 1245show environment DISPLAY
6f5d1a4f 1246show environment TERM
e5d77022 1247
d41e491e 1248# When debugging, it is handy to be able to "return" from
5101529e
EZ
1249# terminate_due_to_signal when an assertion failure is non-fatal.
1250break terminate_due_to_signal
dd878ee1 1251
feaf060a
EZ
1252# x_error_quitter is defined only on X. But window-system is set up
1253# only at run time, during Emacs startup, so we need to defer setting
1254# the breakpoint. init_sys_modes is the first function called on
1255# every platform after init_display, where window-system is set.
1256tbreak init_sys_modes
1257commands
1258 silent
2787bba3 1259 xgetptr globals.f_Vinitial_window_system
913645cd 1260 set $tem = (struct Lisp_Symbol *) $ptr
c644523b 1261 xgetptr $tem->name
913645cd
EZ
1262 set $tem = (struct Lisp_String *) $ptr
1263 set $tem = (char *) $tem->data
feaf060a
EZ
1264 # If we are running in synchronous mode, we want a chance to look
1265 # around before Emacs exits. Perhaps we should put the break
1266 # somewhere else instead...
913645cd 1267 if $tem[0] == 'x' && $tem[1] == '\0'
2d90e492 1268 break x_error_quitter
913645cd 1269 end
feaf060a 1270 continue
dd878ee1 1271end