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