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