Retrospective commit from 2009-1219.
[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"
2fde1500
KS
274 if ($it->region_beg_charpos >= 0)
275 printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
276 end
afca296c
KS
277 printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
278 printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
2fde1500 279 printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
28c1e1ca 280 printf " w=%d", $it->pixel_width
afca296c
KS
281 printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
282 printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
283 printf "\n"
0058964e 284 set $i = 0
82d59cb0 285 while ($i < $it->sp && $i < 4)
0058964e
KS
286 set $e = $it->stack[$i]
287 printf "stack[%d]: ", $i
be996d82 288 pitmethod $e->method
0058964e
KS
289 printf "[%d]", $e->position.charpos
290 printf "\n"
291 set $i = $i + 1
292 end
afca296c
KS
293end
294document pitx
295Pretty print a display iterator.
296Take one arg, an iterator object or pointer.
297end
298
299define pit
300 pitx it
301end
302document pit
303Pretty print the display iterator it.
304end
305
306define prowx
307 set $row = $arg0
308 printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
309 printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
310 printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
311 printf " vis=%d", $row->visible_height
312 printf " L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
313 printf "\n"
314 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
315 if ($row->enabled_p)
316 printf " ENA"
317 end
318 if ($row->displays_text_p)
319 printf " DISP"
320 end
321 if ($row->mode_line_p)
322 printf " MODEL"
323 end
324 if ($row->continued_p)
325 printf " CONT"
326 end
327 if ($row-> truncated_on_left_p)
328 printf " TRUNC:L"
329 end
330 if ($row-> truncated_on_right_p)
331 printf " TRUNC:R"
332 end
333 if ($row->starts_in_middle_of_char_p)
334 printf " STARTMID"
335 end
336 if ($row->ends_in_middle_of_char_p)
337 printf " ENDMID"
338 end
339 if ($row->ends_in_newline_from_string_p)
340 printf " ENDNLFS"
341 end
342 if ($row->ends_at_zv_p)
343 printf " ENDZV"
344 end
345 if ($row->overlapped_p)
346 printf " OLAPD"
347 end
348 if ($row->overlapping_p)
349 printf " OLAPNG"
350 end
351 printf "\n"
352end
353document prowx
354Pretty print information about glyph_row.
355Takes one argument, a row object or pointer.
356end
357
358define prow
359 prowx row
360end
361document prow
362Pretty print information about glyph_row in row.
363end
364
365
366define pcursorx
367 set $cp = $arg0
368 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
369end
370document pcursorx
89955f2e 371Pretty print a window cursor.
afca296c
KS
372end
373
374define pcursor
375 printf "output: "
376 pcursorx output_cursor
377 printf "\n"
378end
379document pcursor
89955f2e 380Pretty print the output_cursor.
afca296c
KS
381end
382
383define pwinx
384 set $w = $arg0
385 xgetint $w->sequence_number
386 if ($w->mini_p != Qnil)
387 printf "Mini "
388 end
389 printf "Window %d ", $int
390 xgetptr $w->buffer
391 set $tem = (struct buffer *) $ptr
392 xgetptr $tem->name
393 printf "%s", ((struct Lisp_String *) $ptr)->data
394 printf "\n"
395 xgetptr $w->start
396 set $tem = (struct Lisp_Marker *) $ptr
397 printf "start=%d end:", $tem->charpos
398 if ($w->window_end_valid != Qnil)
399 xgetint $w->window_end_pos
400 printf "pos=%d", $int
401 xgetint $w->window_end_vpos
402 printf " vpos=%d", $int
403 else
404 printf "invalid"
405 end
406 printf " vscroll=%d", $w->vscroll
407 if ($w->force_start != Qnil)
408 printf " FORCE_START"
409 end
410 if ($w->must_be_updated_p)
411 printf " MUST_UPD"
412 end
413 printf "\n"
414 printf "cursor: "
415 pcursorx $w->cursor
416 printf " phys: "
417 pcursorx $w->phys_cursor
418 if ($w->phys_cursor_on_p)
419 printf " ON"
420 else
421 printf " OFF"
422 end
423 printf " blk="
424 if ($w->last_cursor_off_p != $w->cursor_off_p)
425 if ($w->last_cursor_off_p)
426 printf "ON->"
427 else
428 printf "OFF->"
429 end
430 end
431 if ($w->cursor_off_p)
432 printf "ON"
433 else
434 printf "OFF"
435 end
436 printf "\n"
437end
438document pwinx
439Pretty print a window structure.
89955f2e 440Takes one argument, a pointer to a window structure.
afca296c
KS
441end
442
443define pwin
444 pwinx w
445end
446document pwin
447Pretty print window structure w.
448end
449
bc5a45f3
EZ
450define pbiditype
451 if ($arg0 == 1)
452 printf "L"
453 end
454 if ($arg0 == 2)
455 printf "R"
456 end
457 if ($arg0 == 3)
458 printf "EN"
459 end
460 if ($arg0 == 4)
461 printf "AN"
462 end
463 if ($arg0 == 5)
464 printf "BN"
465 end
466 if ($arg0 == 6)
467 printf "B"
468 end
469 if ($arg0 < 1 || $arg0 > 6)
470 printf "%d??", $arg0
471 end
472end
473document pbiditype
474Print textual description of bidi type given as first argument.
475end
476
1e99743b
KS
477define pgx
478 set $g = $arg0
be996d82
EZ
479 # CHAR_GLYPH
480 if ($g->type == 0)
1e99743b
KS
481 if ($g->u.ch >= ' ' && $g->u.ch < 127)
482 printf "CHAR[%c]", $g->u.ch
483 else
484 printf "CHAR[0x%x]", $g->u.ch
485 end
486 end
be996d82
EZ
487 # COMPOSITE_GLYPH
488 if ($g->type == 1)
5b28ce35 489 printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->u.cmp.from, $g->u.cmp.to
1e99743b 490 end
be996d82
EZ
491 # IMAGE_GLYPH
492 if ($g->type == 2)
1e99743b
KS
493 printf "IMAGE[%d]", $g->u.img_id
494 end
be996d82
EZ
495 # STRETCH_GLYPH
496 if ($g->type == 3)
1e99743b
KS
497 printf "STRETCH[%d+%d]", $g->u.stretch.height, $g->u.stretch.ascent
498 end
499 xgettype ($g->object)
500 if ($type == Lisp_String)
501 printf " str=%x[%d]", $g->object, $g->charpos
502 else
503 printf " pos=%d", $g->charpos
504 end
bc5a45f3
EZ
505 # For characters, print their resolved level and bidi type
506 if ($g->type == 0)
507 printf " blev=%d,btyp=", $g->resolved_level
508 pbiditype $g->bidi_type
509 end
1e99743b 510 printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
be996d82
EZ
511 # If not DEFAULT_FACE_ID
512 if ($g->face_id != 0)
1e99743b
KS
513 printf " face=%d", $g->face_id
514 end
515 if ($g->voffset)
516 printf " vof=%d", $g->voffset
517 end
518 if ($g->multibyte_p)
519 printf " MB"
520 end
521 if ($g->padding_p)
522 printf " PAD"
523 end
524 if ($g->glyph_not_available_p)
525 printf " N/A"
526 end
527 if ($g->overlaps_vertically_p)
528 printf " OVL"
529 end
530 if ($g->left_box_line_p)
531 printf " ["
532 end
533 if ($g->right_box_line_p)
534 printf " ]"
535 end
536 if ($g->slice.x || $g->slice.y || $g->slice.width || $g->slice.height)
537 printf " slice=%d,%d,%d,%d" ,$g->slice.x, $g->slice.y, $g->slice.width, $g->slice.height
538 end
539 printf "\n"
540end
541document pgx
542Pretty print a glyph structure.
89955f2e 543Takes one argument, a pointer to a glyph structure.
1e99743b
KS
544end
545
546define pg
547 set $pgidx = 0
548 pgx glyph
549end
550document pg
551Pretty print glyph structure glyph.
552end
553
554define pgi
555 set $pgidx = $arg0
556 pgx (&glyph[$pgidx])
557end
558document pgi
559Pretty print glyph structure glyph[I].
560Takes one argument, a integer I.
561end
562
563define pgn
564 set $pgidx = $pgidx + 1
565 pgx (&glyph[$pgidx])
566end
567document pgn
568Pretty print next glyph structure.
569end
570
571define pgrowx
572 set $row = $arg0
573 set $area = 0
574 set $xofs = $row->x
575 while ($area < 3)
576 set $used = $row->used[$area]
577 if ($used > 0)
578 set $gl0 = $row->glyphs[$area]
579 set $pgidx = 0
580 printf "%s: %d glyphs\n", ($area == 0 ? "LEFT" : $area == 2 ? "RIGHT" : "TEXT"), $used
581 while ($pgidx < $used)
582 printf "%3d %4d: ", $pgidx, $xofs
583 pgx $gl0[$pgidx]
584 set $xofs = $xofs + $gl0[$pgidx]->pixel_width
585 set $pgidx = $pgidx + 1
586 end
587 end
588 set $area = $area + 1
589 end
590end
591document pgrowx
592Pretty print all glyphs in a row structure.
593Takes one argument, a pointer to a row structure.
594end
595
596define pgrow
597 pgrowx row
598end
599document pgrow
600Pretty print all glyphs in row structure row.
601end
afca296c 602
be996d82
EZ
603define pgrowit
604 pgrowx it->glyph_row
605end
606document pgrowit
607Pretty print all glyphs in it->glyph_row.
608end
609
a6ffc6a2 610define xtype
6b61353c
KH
611 xgettype $
612 output $type
613 echo \n
614 if $type == Lisp_Misc
615 xmisctype
616 else
617 if $type == Lisp_Vectorlike
618 xvectype
619 end
620 end
a6ffc6a2 621end
e065a56e 622document xtype
ba1e23bf 623Print the type of $, assuming it is an Emacs Lisp value.
3fe8bda5 624If the first type printed is Lisp_Vector or Lisp_Misc,
6b61353c 625a second line gives the more precise type.
3fe8bda5
RS
626end
627
628define xvectype
6b61353c
KH
629 xgetptr $
630 set $size = ((struct Lisp_Vector *) $ptr)->size
fc80da24 631 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
6b61353c 632 echo \n
3fe8bda5
RS
633end
634document xvectype
89955f2e
NR
635Print the size or vector subtype of $.
636This command assumes that $ is a vector or pseudovector.
3fe8bda5
RS
637end
638
639define xmisctype
6b61353c
KH
640 xgetptr $
641 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
642 echo \n
3fe8bda5
RS
643end
644document xmisctype
2d5ed88d 645Assume that $ is some misc type and print its specific type.
e065a56e 646end
a6ffc6a2
JB
647
648define xint
6b61353c
KH
649 xgetint $
650 print $int
a6ffc6a2 651end
e065a56e 652document xint
2d5ed88d 653Print $ as an Emacs Lisp integer. This gets the sign right.
e065a56e 654end
a6ffc6a2
JB
655
656define xptr
6b61353c
KH
657 xgetptr $
658 print (void *) $ptr
a6ffc6a2 659end
e065a56e 660document xptr
2d5ed88d 661Print the pointer portion of an Emacs Lisp value in $.
e065a56e 662end
a6ffc6a2 663
a6ffc6a2 664define xmarker
6b61353c
KH
665 xgetptr $
666 print (struct Lisp_Marker *) $ptr
a6ffc6a2 667end
e065a56e 668document xmarker
2d5ed88d
EZ
669Print $ as a marker pointer.
670This command assumes that $ is an Emacs Lisp marker value.
e065a56e 671end
a6ffc6a2 672
a6a3acf0 673define xoverlay
6b61353c
KH
674 xgetptr $
675 print (struct Lisp_Overlay *) $ptr
a6a3acf0
KH
676end
677document xoverlay
89955f2e
NR
678Print $ as a overlay pointer.
679This command assumes that $ is an Emacs Lisp overlay value.
a6a3acf0
KH
680end
681
682define xmiscfree
6b61353c
KH
683 xgetptr $
684 print (struct Lisp_Free *) $ptr
a6a3acf0
KH
685end
686document xmiscfree
89955f2e
NR
687Print $ as a misc free-cell pointer.
688This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
689end
690
691define xintfwd
6b61353c
KH
692 xgetptr $
693 print (struct Lisp_Intfwd *) $ptr
a6a3acf0
KH
694end
695document xintfwd
89955f2e
NR
696Print $ as an integer forwarding pointer.
697This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
698end
699
700define xboolfwd
6b61353c
KH
701 xgetptr $
702 print (struct Lisp_Boolfwd *) $ptr
a6a3acf0
KH
703end
704document xboolfwd
89955f2e
NR
705Print $ as a boolean forwarding pointer.
706This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
707end
708
709define xobjfwd
6b61353c
KH
710 xgetptr $
711 print (struct Lisp_Objfwd *) $ptr
a6a3acf0
KH
712end
713document xobjfwd
89955f2e
NR
714Print $ as an object forwarding pointer.
715This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
716end
717
029c56f6 718define xbufobjfwd
6b61353c
KH
719 xgetptr $
720 print (struct Lisp_Buffer_Objfwd *) $ptr
a6a3acf0 721end
029c56f6 722document xbufobjfwd
89955f2e
NR
723Print $ as a buffer-local object forwarding pointer.
724This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
725end
726
a0371857 727define xkbobjfwd
6b61353c
KH
728 xgetptr $
729 print (struct Lisp_Kboard_Objfwd *) $ptr
cd39e946 730end
a0371857 731document xkbobjfwd
89955f2e
NR
732Print $ as a kboard-local object forwarding pointer.
733This command assumes that $ is an Emacs Lisp Misc value.
cd39e946
KH
734end
735
029c56f6 736define xbuflocal
6b61353c
KH
737 xgetptr $
738 print (struct Lisp_Buffer_Local_Value *) $ptr
a6a3acf0 739end
029c56f6 740document xbuflocal
89955f2e
NR
741Print $ as a buffer-local-value pointer.
742This command assumes that $ is an Emacs Lisp Misc value.
a6a3acf0
KH
743end
744
a6ffc6a2 745define xsymbol
cfcde636
KS
746 set $sym = $
747 xgetptr $sym
6b61353c 748 print (struct Lisp_Symbol *) $ptr
cfcde636 749 xprintsym $sym
6b61353c 750 echo \n
a6ffc6a2 751end
e065a56e
JB
752document xsymbol
753Print the name and address of the symbol $.
ba1e23bf 754This command assumes that $ is an Emacs Lisp symbol value.
e065a56e 755end
a6ffc6a2
JB
756
757define xstring
6b61353c
KH
758 xgetptr $
759 print (struct Lisp_String *) $ptr
0001e968 760 xprintstr $
6b61353c 761 echo \n
a6ffc6a2 762end
a6ffc6a2 763document xstring
e065a56e 764Print the contents and address of the string $.
ba1e23bf 765This command assumes that $ is an Emacs Lisp string value.
a6ffc6a2
JB
766end
767
768define xvector
6b61353c
KH
769 xgetptr $
770 print (struct Lisp_Vector *) $ptr
fc80da24 771 output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
ef15f270 772echo \n
a6ffc6a2 773end
a6ffc6a2 774document xvector
e065a56e 775Print the contents and address of the vector $.
ba1e23bf 776This command assumes that $ is an Emacs Lisp vector value.
a6ffc6a2
JB
777end
778
14a8902a 779define xprocess
6b61353c
KH
780 xgetptr $
781 print (struct Lisp_Process *) $ptr
782 output *$
783 echo \n
14a8902a
RS
784end
785document xprocess
89955f2e
NR
786Print the address of the struct Lisp_process to which $ points.
787This command assumes that $ is a Lisp_Object.
14a8902a
RS
788end
789
ec558adc 790define xframe
6b61353c
KH
791 xgetptr $
792 print (struct frame *) $ptr
28c1e1ca
KS
793 xgetptr $->name
794 set $ptr = (struct Lisp_String *) $ptr
795 xprintstr $ptr
796 echo \n
a6ffc6a2 797end
ec558adc 798document xframe
2d5ed88d
EZ
799Print $ as a frame pointer.
800This command assumes $ is an Emacs Lisp frame value.
e065a56e 801end
a6ffc6a2 802
14a8902a 803define xcompiled
6b61353c
KH
804 xgetptr $
805 print (struct Lisp_Vector *) $ptr
806 output ($->contents[0])@($->size & 0xff)
14a8902a
RS
807end
808document xcompiled
89955f2e
NR
809Print $ as a compiled function pointer.
810This command assumes that $ is an Emacs Lisp compiled value.
14a8902a
RS
811end
812
813define xwindow
6b61353c
KH
814 xgetptr $
815 print (struct window *) $ptr
25d34643
RS
816 set $window = (struct window *) $ptr
817 xgetint $window->total_cols
818 set $width=$int
819 xgetint $window->total_lines
820 set $height=$int
821 xgetint $window->left_col
822 set $left=$int
823 xgetint $window->top_line
824 set $top=$int
825 printf "%dx%d+%d+%d\n", $width, $height, $left, $top
14a8902a
RS
826end
827document xwindow
828Print $ as a window pointer, assuming it is an Emacs Lisp window value.
829Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
830end
831
029c56f6 832define xwinconfig
6b61353c
KH
833 xgetptr $
834 print (struct save_window_data *) $ptr
a6a3acf0 835end
029c56f6 836document xwinconfig
89955f2e
NR
837Print $ as a window configuration pointer.
838This command assumes that $ is an Emacs Lisp window configuration value.
a6a3acf0
KH
839end
840
14a8902a 841define xsubr
6b61353c
KH
842 xgetptr $
843 print (struct Lisp_Subr *) $ptr
844 output *$
845 echo \n
a6a3acf0 846end
14a8902a
RS
847document xsubr
848Print the address of the subr which the Lisp_Object $ points to.
849end
850
851define xchartable
6b61353c
KH
852 xgetptr $
853 print (struct Lisp_Char_Table *) $ptr
854 printf "Purpose: "
855 xprintsym $->purpose
856 printf " %d extra slots", ($->size & 0x1ff) - 68
857 echo \n
14a8902a
RS
858end
859document xchartable
860Print the address of the char-table $, and its purpose.
861This command assumes that $ is an Emacs Lisp char-table value.
862end
863
864define xboolvector
6b61353c
KH
865 xgetptr $
866 print (struct Lisp_Bool_Vector *) $ptr
fc80da24 867 output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
6b61353c 868 echo \n
14a8902a
RS
869end
870document xboolvector
871Print the contents and address of the bool-vector $.
872This command assumes that $ is an Emacs Lisp bool-vector value.
873end
874
875define xbuffer
6b61353c
KH
876 xgetptr $
877 print (struct buffer *) $ptr
878 xgetptr $->name
879 output ((struct Lisp_String *) $ptr)->data
880 echo \n
14a8902a
RS
881end
882document xbuffer
2d5ed88d
EZ
883Set $ as a buffer pointer and the name of the buffer.
884This command assumes $ is an Emacs Lisp buffer value.
a6a3acf0
KH
885end
886
3266f62b 887define xhashtable
6b61353c
KH
888 xgetptr $
889 print (struct Lisp_Hash_Table *) $ptr
3266f62b
GM
890end
891document xhashtable
89955f2e
NR
892Set $ as a hash table pointer.
893This command assumes that $ is an Emacs Lisp hash table value.
3266f62b
GM
894end
895
a6ffc6a2 896define xcons
6b61353c
KH
897 xgetptr $
898 print (struct Lisp_Cons *) $ptr
899 output/x *$
900 echo \n
a6ffc6a2 901end
e065a56e 902document xcons
2d5ed88d 903Print the contents of $ as an Emacs Lisp cons.
e065a56e 904end
a6ffc6a2 905
6f493884 906define nextcons
b4483658 907 p $.u.cdr
6b61353c 908 xcons
6f493884
RS
909end
910document nextcons
911Print the contents of the next cell in a list.
89955f2e 912This command assumes that the last thing you printed was a cons cell contents
6f493884
RS
913(type struct Lisp_Cons) or a pointer to one.
914end
a6ffc6a2 915define xcar
6b61353c
KH
916 xgetptr $
917 xgettype $
918 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
a6ffc6a2 919end
e065a56e 920document xcar
2d5ed88d 921Assume that $ is an Emacs Lisp pair and print its car.
e065a56e 922end
a6ffc6a2
JB
923
924define xcdr
6b61353c
KH
925 xgetptr $
926 xgettype $
b4483658 927 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
a6ffc6a2 928end
e065a56e 929document xcdr
2d5ed88d 930Assume that $ is an Emacs Lisp pair and print its cdr.
e065a56e 931end
a6ffc6a2 932
28c1e1ca
KS
933define xlist
934 xgetptr $
935 set $cons = (struct Lisp_Cons *) $ptr
936 xgetptr Qnil
937 set $nil = $ptr
938 set $i = 0
939 while $cons != $nil && $i < 10
940 p/x $cons->car
941 xpr
942 xgetptr $cons->u.cdr
943 set $cons = (struct Lisp_Cons *) $ptr
944 set $i = $i + 1
945 printf "---\n"
946 end
947 if $cons == $nil
948 printf "nil\n"
949 else
950 printf "...\n"
951 p $ptr
952 end
953end
954document xlist
955Print $ assuming it is a list.
956end
957
df86e57e 958define xfloat
6b61353c 959 xgetptr $
b4483658 960 print ((struct Lisp_Float *) $ptr)->u.data
df86e57e
JB
961end
962document xfloat
963Print $ assuming it is a lisp floating-point number.
964end
965
b2367490 966define xscrollbar
6b61353c
KH
967 xgetptr $
968 print (struct scrollbar *) $ptr
b2367490
JB
969output *$
970echo \n
971end
dec5f4e3 972document xscrollbar
b2367490
JB
973Print $ as a scrollbar pointer.
974end
975
28c1e1ca
KS
976define xpr
977 xtype
978 if $type == Lisp_Int
979 xint
980 end
981 if $type == Lisp_Symbol
982 xsymbol
983 end
984 if $type == Lisp_String
985 xstring
986 end
987 if $type == Lisp_Cons
988 xcons
989 end
990 if $type == Lisp_Float
991 xfloat
992 end
993 if $type == Lisp_Misc
994 set $misc = (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
995 if $misc == Lisp_Misc_Free
996 xmiscfree
997 end
998 if $misc == Lisp_Misc_Boolfwd
999 xboolfwd
1000 end
1001 if $misc == Lisp_Misc_Marker
1002 xmarker
1003 end
1004 if $misc == Lisp_Misc_Intfwd
1005 xintfwd
1006 end
1007 if $misc == Lisp_Misc_Boolfwd
1008 xboolfwd
1009 end
1010 if $misc == Lisp_Misc_Objfwd
1011 xobjfwd
1012 end
1013 if $misc == Lisp_Misc_Buffer_Objfwd
1014 xbufobjfwd
1015 end
1016 if $misc == Lisp_Misc_Buffer_Local_Value
1017 xbuflocal
1018 end
1019# if $misc == Lisp_Misc_Some_Buffer_Local_Value
1020# xvalue
1021# end
1022 if $misc == Lisp_Misc_Overlay
1023 xoverlay
1024 end
1025 if $misc == Lisp_Misc_Kboard_Objfwd
1026 xkbobjfwd
1027 end
1028# if $misc == Lisp_Misc_Save_Value
1029# xsavevalue
1030# end
1031 end
1032 if $type == Lisp_Vectorlike
1033 set $size = ((struct Lisp_Vector *) $ptr)->size
1034 if ($size & PVEC_FLAG)
1035 set $vec = (enum pvec_type) ($size & PVEC_TYPE_MASK)
1036 if $vec == PVEC_NORMAL_VECTOR
1037 xvector
1038 end
1039 if $vec == PVEC_PROCESS
1040 xprocess
1041 end
1042 if $vec == PVEC_FRAME
1043 xframe
1044 end
1045 if $vec == PVEC_COMPILED
1046 xcompiled
1047 end
1048 if $vec == PVEC_WINDOW
1049 xwindow
1050 end
1051 if $vec == PVEC_WINDOW_CONFIGURATION
1052 xwinconfig
1053 end
1054 if $vec == PVEC_SUBR
1055 xsubr
1056 end
1057 if $vec == PVEC_CHAR_TABLE
1058 xchartable
1059 end
1060 if $vec == PVEC_BOOL_VECTOR
1061 xboolvector
1062 end
1063 if $vec == PVEC_BUFFER
1064 xbuffer
1065 end
1066 if $vec == PVEC_HASH_TABLE
1067 xhashtable
1068 end
1069 else
1070 xvector
1071 end
1072 end
1073end
1074document xpr
1075Print $ as a lisp object of any type.
1076end
1077
0001e968 1078define xprintstr
d3332249 1079 set $data = (char *) $arg0->data
0001e968
SM
1080 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1081end
1082
24b4d1bc 1083define xprintsym
6b61353c
KH
1084 xgetptr $arg0
1085 set $sym = (struct Lisp_Symbol *) $ptr
1086 xgetptr $sym->xname
1087 set $sym_name = (struct Lisp_String *) $ptr
0001e968 1088 xprintstr $sym_name
24b4d1bc
GM
1089end
1090document xprintsym
1091 Print argument as a symbol.
1092end
1093
d5fb9ac8
KH
1094define xcoding
1095 set $tmp = (struct Lisp_Hash_Table *) ((Vcoding_system_hash_table & $valmask) | gdb_data_seg_bits)
1096 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
1097 set $name = $tmp->contents[$arg0 * 2]
1098 print $name
1099 pr
1100 print $tmp->contents[$arg0 * 2 + 1]
1101 pr
1102end
1103document xcoding
8f924df7 1104 Print the name and attributes of coding system that has ID (argument).
d5fb9ac8
KH
1105end
1106
1107define xcharset
1108 set $tmp = (struct Lisp_Hash_Table *) ((Vcharset_hash_table & $valmask) | gdb_data_seg_bits)
1109 set $tmp = (struct Lisp_Vector *) (($tmp->key_and_value & $valmask) | gdb_data_seg_bits)
af800dc0 1110 p $tmp->contents[charset_table[$arg0].hash_index * 2]
d5fb9ac8
KH
1111 pr
1112end
1113document xcharset
8f924df7 1114 Print the name of charset that has ID (argument).
d5fb9ac8
KH
1115end
1116
9e067dbc
KH
1117define xfontset
1118 xgetptr $
1119 set $tbl = (struct Lisp_Char_Table *) $ptr
1120 print $tbl
1121 xgetint $tbl->extras[0]
1122 printf " ID:%d", $int
1123 xgettype $tbl->extras[1]
1124 xgetptr $tbl->extras[1]
1125 if $type == Lisp_String
1126 set $ptr = (struct Lisp_String *) $ptr
1127 printf " Name:"
1128 xprintstr $ptr
1129 else
1130 xgetptr $tbl->extras[2]
1131 set $ptr = (struct Lisp_Char_Table *) $ptr
1132 xgetptr $ptr->extras[1]
1133 set $ptr = (struct Lisp_String *) $ptr
1134 printf " Realized from:"
1135 xprintstr $ptr
1136 end
1137 echo \n
1138end
1139
322081f1
KH
1140define xfont
1141 xgetptr $
1142 set $size = (((struct Lisp_Vector *) $ptr)->size & 0x1FF)
1143 if $size == FONT_SPEC_MAX
1144 print (struct font_spec *) $ptr
1145 else
1146 if $size == FONT_ENTITY_MAX
1147 print (struct font_entity *) $ptr
1148 else
1149 print (struct font *) $ptr
1150 end
1151 end
1152end
1153document xfont
1154Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1155end
1156
24b4d1bc
GM
1157define xbacktrace
1158 set $bt = backtrace_list
177c0ea7 1159 while $bt
6b61353c 1160 xgettype (*$bt->function)
3176a27e 1161 if $type == Lisp_Symbol
6b61353c 1162 xprintsym (*$bt->function)
c51842ec 1163 printf " (0x%x)\n", $bt->args
3176a27e
GM
1164 else
1165 printf "0x%x ", *$bt->function
1166 if $type == Lisp_Vectorlike
6b61353c
KH
1167 xgetptr (*$bt->function)
1168 set $size = ((struct Lisp_Vector *) $ptr)->size
fc80da24 1169 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
3176a27e
GM
1170 else
1171 printf "Lisp type %d", $type
1172 end
1173 echo \n
1174 end
24b4d1bc
GM
1175 set $bt = $bt->next
1176 end
1177end
1178document xbacktrace
1179 Print a backtrace of Lisp function calls from backtrace_list.
177c0ea7 1180 Set a breakpoint at Fsignal and call this to see from where
3176a27e 1181 an error was signaled.
24b4d1bc
GM
1182end
1183
28c1e1ca
KS
1184define which
1185 set debug_print (which_symbols ($arg0))
1186end
1187document which
89955f2e 1188 Print symbols which references a given lisp object
28c1e1ca
KS
1189 either as its symbol value or symbol function.
1190end
1191
1192define xbytecode
1193 set $bt = byte_stack_list
1194 while $bt
1195 xgettype ($bt->byte_string)
1196 printf "0x%x => ", $bt->byte_string
1197 which $bt->byte_string
1198 set $bt = $bt->next
1199 end
1200end
1201document xbytecode
1202 Print a backtrace of the byte code stack.
1203end
1204
338fa84a
KS
1205# Show Lisp backtrace after normal backtrace.
1206define hookpost-backtrace
1207 set $bt = backtrace_list
1208 if $bt
1209 echo \n
1210 echo Lisp Backtrace:\n
1211 xbacktrace
1212 end
1213end
1214
24b4d1bc 1215define xreload
6b61353c
KH
1216 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1217 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
24b4d1bc
GM
1218end
1219document xreload
1220 When starting Emacs a second time in the same gdb session under
6b61353c 1221 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
be9e8331
DL
1222 their values. (The same happens on current (2000) versions of GNU/Linux
1223 with gdb 5.0.)
c71ea231 1224 This function reloads them.
24b4d1bc 1225end
6b61353c 1226xreload
24b4d1bc 1227
6c5d0c52
KS
1228# Flush display (X only)
1229define ff
1230 set x_flush (0)
1231end
1232document ff
1233Flush pending X window display updates to screen.
1234Works only when an inferior emacs is executing.
1235end
1236
1237
be9e8331
DL
1238define hook-run
1239 xreload
1240end
1241
e869a29d
RS
1242# Call xreload if a new Emacs executable is loaded.
1243define hookpost-run
1244 xreload
1245end
1246
e065a56e 1247set print pretty on
df86e57e 1248set print sevenbit-strings
a6ffc6a2 1249
e5d77022 1250show environment DISPLAY
6f5d1a4f 1251show environment TERM
e5d77022 1252
c2c50958 1253# People get bothered when they see messages about non-existent functions...
dd878ee1 1254xgetptr Vsystem_type
ea5f3ad4
EZ
1255# $ptr is NULL in temacs
1256if ($ptr != 0)
1257 set $tem = (struct Lisp_Symbol *) $ptr
1258 xgetptr $tem->xname
1259 set $tem = (struct Lisp_String *) $ptr
1260 set $tem = (char *) $tem->data
1261
1262 # Don't let abort actually run, as it will make stdio stop working and
1263 # therefore the `pr' command above as well.
1264 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
1265 # The windows-nt build replaces abort with its own function.
1266 break w32_abort
1267 else
1268 break abort
1269 end
feaf060a 1270end
dd878ee1 1271
feaf060a
EZ
1272# x_error_quitter is defined only on X. But window-system is set up
1273# only at run time, during Emacs startup, so we need to defer setting
1274# the breakpoint. init_sys_modes is the first function called on
1275# every platform after init_display, where window-system is set.
1276tbreak init_sys_modes
1277commands
1278 silent
4fd9de39 1279 xgetptr Vinitial_window_system
913645cd
EZ
1280 set $tem = (struct Lisp_Symbol *) $ptr
1281 xgetptr $tem->xname
1282 set $tem = (struct Lisp_String *) $ptr
1283 set $tem = (char *) $tem->data
feaf060a
EZ
1284 # If we are running in synchronous mode, we want a chance to look
1285 # around before Emacs exits. Perhaps we should put the break
1286 # somewhere else instead...
913645cd 1287 if $tem[0] == 'x' && $tem[1] == '\0'
2d90e492 1288 break x_error_quitter
913645cd 1289 end
feaf060a 1290 continue
dd878ee1 1291end
6b61353c 1292# arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe