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