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