]> code.delx.au - gnu-emacs/blob - src/.gdbinit
Merged in changes from CVS trunk. Plus added lisp/term tweaks.
[gnu-emacs] / src / .gdbinit
1 # Copyright (C) 1992, 93, 94, 95, 96, 97, 1998, 2000, 01, 2004
2 # Free Software Foundation, Inc.
3 #
4 # This file is part of GNU Emacs.
5 #
6 # GNU Emacs is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2, or (at your option)
9 # any later version.
10 #
11 # GNU Emacs is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with GNU Emacs; see the file COPYING. If not, write to the
18 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 # Boston, MA 02110-1301, USA.
20
21 # Force loading of symbols, enough to give us gdb_valbits etc.
22 set main
23
24 # Find lwlib source files too.
25 dir ../lwlib
26 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
27
28 # Don't enter GDB when user types C-g to quit.
29 # This has one unfortunate effect: you can't type C-c
30 # at the GDB to stop Emacs, when using X.
31 # However, C-z works just as well in that case.
32 handle 2 noprint pass
33
34 # Don't pass SIGALRM to Emacs. This makes problems when
35 # debugging.
36 handle SIGALRM ignore
37
38 # $valmask and $tagmask are mask values set up by the xreload macro below.
39
40 # Use $bugfix so that the value isn't a constant.
41 # Using a constant runs into GDB bugs sometimes.
42 define xgetptr
43 set $bugfix = $arg0
44 set $ptr = (gdb_use_union ? $bugfix.u.val : $bugfix & $valmask) | gdb_data_seg_bits
45 end
46
47 define xgetint
48 set $bugfix = $arg0
49 set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
50 end
51
52 define xgettype
53 set $bugfix = $arg0
54 set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
55 end
56
57 # Set up something to print out s-expressions.
58 define pr
59 set debug_print ($)
60 end
61 document pr
62 Print the emacs s-expression which is $.
63 Works only when an inferior emacs is executing.
64 end
65
66 # Print out s-expressions
67 define pp
68 set $tmp = $arg0
69 set debug_print ($tmp)
70 end
71 document pp
72 Print the argument as an emacs s-expression
73 Works only when an inferior emacs is executing.
74 end
75
76 # Print out current buffer point and boundaries
77 define ppt
78 set $b = current_buffer
79 set $t = $b->text
80 printf "BUF PT: %d", $b->pt
81 if ($b->pt != $b->pt_byte)
82 printf "[%d]", $b->pt_byte
83 end
84 printf " of 1..%d", $t->z
85 if ($t->z != $t->z_byte)
86 printf "[%d]", $t->z_byte
87 end
88 if ($b->begv != 1 || $b->zv != $t->z)
89 printf " NARROW=%d..%d", $b->begv, $b->zv
90 if ($b->begv != $b->begv_byte || $b->zv != $b->zv_byte)
91 printf " [%d..%d]", $b->begv_byte, $b->zv_byte
92 end
93 end
94 printf " GAP: %d", $t->gpt
95 if ($t->gpt != $t->gpt_byte)
96 printf "[%d]", $t->gpt_byte
97 end
98 printf " SZ=%d\n", $t->gap_size
99 end
100 document ppt
101 Print point, beg, end, narrow, and gap for current buffer.
102 end
103
104 # Print out iterator given as first arg
105 define pitx
106 set $it = $arg0
107 printf "cur=%d", $it->current.pos.charpos
108 if ($it->current.pos.charpos != $it->current.pos.bytepos)
109 printf "[%d]", $it->current.pos.bytepos
110 end
111 printf " start=%d", $it->start.pos.charpos
112 if ($it->start.pos.charpos != $it->start.pos.bytepos)
113 printf "[%d]", $it->start.pos.bytepos
114 end
115 printf " end=%d", $it->end_charpos
116 printf " stop=%d", $it->stop_charpos
117 printf " face=%d", $it->face_id
118 if ($it->multibyte_p)
119 printf " MB"
120 end
121 if ($it->header_line_p)
122 printf " HL"
123 end
124 if ($it->n_overlay_strings > 0)
125 printf " nov=%d"
126 end
127 if ($it->sp != 0)
128 printf " sp=%d", $it->sp
129 end
130 if ($it->what == IT_CHARACTER)
131 if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
132 printf " ch='%c'", $it->c
133 else
134 printf " ch=[%d,%d]", $it->c, $it->len
135 end
136 else
137 if ($it->what == IT_IMAGE)
138 printf " IMAGE=%d", $it->image_id
139 else
140 printf " "
141 output $it->what
142 end
143 end
144 if ($it->method != GET_FROM_BUFFER)
145 printf " next="
146 output $it->method
147 if ($it->method == GET_FROM_STRING)
148 printf "[%d]", $it->current.string_pos.charpos
149 end
150 end
151 printf "\n"
152 if ($it->region_beg_charpos >= 0)
153 printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
154 end
155 printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
156 printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
157 printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
158 printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
159 printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
160 printf "\n"
161 end
162 document pitx
163 Pretty print a display iterator.
164 Take one arg, an iterator object or pointer.
165 end
166
167 define pit
168 pitx it
169 end
170 document pit
171 Pretty print the display iterator it.
172 end
173
174 define prowx
175 set $row = $arg0
176 printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
177 printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
178 printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
179 printf " vis=%d", $row->visible_height
180 printf " L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
181 printf "\n"
182 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
183 if ($row->enabled_p)
184 printf " ENA"
185 end
186 if ($row->displays_text_p)
187 printf " DISP"
188 end
189 if ($row->mode_line_p)
190 printf " MODEL"
191 end
192 if ($row->continued_p)
193 printf " CONT"
194 end
195 if ($row-> truncated_on_left_p)
196 printf " TRUNC:L"
197 end
198 if ($row-> truncated_on_right_p)
199 printf " TRUNC:R"
200 end
201 if ($row->starts_in_middle_of_char_p)
202 printf " STARTMID"
203 end
204 if ($row->ends_in_middle_of_char_p)
205 printf " ENDMID"
206 end
207 if ($row->ends_in_newline_from_string_p)
208 printf " ENDNLFS"
209 end
210 if ($row->ends_at_zv_p)
211 printf " ENDZV"
212 end
213 if ($row->overlapped_p)
214 printf " OLAPD"
215 end
216 if ($row->overlapping_p)
217 printf " OLAPNG"
218 end
219 printf "\n"
220 end
221 document prowx
222 Pretty print information about glyph_row.
223 Takes one argument, a row object or pointer.
224 end
225
226 define prow
227 prowx row
228 end
229 document prow
230 Pretty print information about glyph_row in row.
231 end
232
233
234 define pcursorx
235 set $cp = $arg0
236 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
237 end
238 document pcursorx
239 Pretty print a window cursor
240 end
241
242 define pcursor
243 printf "output: "
244 pcursorx output_cursor
245 printf "\n"
246 end
247 document pcursor
248 Pretty print the output_cursor
249 end
250
251 define pwinx
252 set $w = $arg0
253 xgetint $w->sequence_number
254 if ($w->mini_p != Qnil)
255 printf "Mini "
256 end
257 printf "Window %d ", $int
258 xgetptr $w->buffer
259 set $tem = (struct buffer *) $ptr
260 xgetptr $tem->name
261 printf "%s", ((struct Lisp_String *) $ptr)->data
262 printf "\n"
263 xgetptr $w->start
264 set $tem = (struct Lisp_Marker *) $ptr
265 printf "start=%d end:", $tem->charpos
266 if ($w->window_end_valid != Qnil)
267 xgetint $w->window_end_pos
268 printf "pos=%d", $int
269 xgetint $w->window_end_vpos
270 printf " vpos=%d", $int
271 else
272 printf "invalid"
273 end
274 printf " vscroll=%d", $w->vscroll
275 if ($w->force_start != Qnil)
276 printf " FORCE_START"
277 end
278 if ($w->must_be_updated_p)
279 printf " MUST_UPD"
280 end
281 printf "\n"
282 printf "cursor: "
283 pcursorx $w->cursor
284 printf " phys: "
285 pcursorx $w->phys_cursor
286 if ($w->phys_cursor_on_p)
287 printf " ON"
288 else
289 printf " OFF"
290 end
291 printf " blk="
292 if ($w->last_cursor_off_p != $w->cursor_off_p)
293 if ($w->last_cursor_off_p)
294 printf "ON->"
295 else
296 printf "OFF->"
297 end
298 end
299 if ($w->cursor_off_p)
300 printf "ON"
301 else
302 printf "OFF"
303 end
304 printf "\n"
305 end
306 document pwinx
307 Pretty print a window structure.
308 Takes one argument, a pointer to a window structure
309 end
310
311 define pwin
312 pwinx w
313 end
314 document pwin
315 Pretty print window structure w.
316 end
317
318
319 define xtype
320 xgettype $
321 output $type
322 echo \n
323 if $type == Lisp_Misc
324 xmisctype
325 else
326 if $type == Lisp_Vectorlike
327 xvectype
328 end
329 end
330 end
331 document xtype
332 Print the type of $, assuming it is an Emacs Lisp value.
333 If the first type printed is Lisp_Vector or Lisp_Misc,
334 a second line gives the more precise type.
335 end
336
337 define xvectype
338 xgetptr $
339 set $size = ((struct Lisp_Vector *) $ptr)->size
340 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
341 echo \n
342 end
343 document xvectype
344 Print the size or vector subtype of $, assuming it is a vector or pseudovector.
345 end
346
347 define xmisctype
348 xgetptr $
349 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
350 echo \n
351 end
352 document xmisctype
353 Print the specific type of $, assuming it is some misc type.
354 end
355
356 define xint
357 xgetint $
358 print $int
359 end
360 document xint
361 Print $, assuming it is an Emacs Lisp integer. This gets the sign right.
362 end
363
364 define xptr
365 xgetptr $
366 print (void *) $ptr
367 end
368 document xptr
369 Print the pointer portion of $, assuming it is an Emacs Lisp value.
370 end
371
372 define xmarker
373 xgetptr $
374 print (struct Lisp_Marker *) $ptr
375 end
376 document xmarker
377 Print $ as a marker pointer, assuming it is an Emacs Lisp marker value.
378 end
379
380 define xoverlay
381 xgetptr $
382 print (struct Lisp_Overlay *) $ptr
383 end
384 document xoverlay
385 Print $ as a overlay pointer, assuming it is an Emacs Lisp overlay value.
386 end
387
388 define xmiscfree
389 xgetptr $
390 print (struct Lisp_Free *) $ptr
391 end
392 document xmiscfree
393 Print $ as a misc free-cell pointer, assuming it is an Emacs Lisp Misc value.
394 end
395
396 define xintfwd
397 xgetptr $
398 print (struct Lisp_Intfwd *) $ptr
399 end
400 document xintfwd
401 Print $ as an integer forwarding pointer, assuming it is an Emacs Lisp Misc value.
402 end
403
404 define xboolfwd
405 xgetptr $
406 print (struct Lisp_Boolfwd *) $ptr
407 end
408 document xboolfwd
409 Print $ as a boolean forwarding pointer, assuming it is an Emacs Lisp Misc value.
410 end
411
412 define xobjfwd
413 xgetptr $
414 print (struct Lisp_Objfwd *) $ptr
415 end
416 document xobjfwd
417 Print $ as an object forwarding pointer, assuming it is an Emacs Lisp Misc value.
418 end
419
420 define xbufobjfwd
421 xgetptr $
422 print (struct Lisp_Buffer_Objfwd *) $ptr
423 end
424 document xbufobjfwd
425 Print $ as a buffer-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
426 end
427
428 define xkbobjfwd
429 xgetptr $
430 print (struct Lisp_Kboard_Objfwd *) $ptr
431 end
432 document xkbobjfwd
433 Print $ as a kboard-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
434 end
435
436 define xbuflocal
437 xgetptr $
438 print (struct Lisp_Buffer_Local_Value *) $ptr
439 end
440 document xbuflocal
441 Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value.
442 end
443
444 define xsymbol
445 set $sym = $
446 xgetptr $sym
447 print (struct Lisp_Symbol *) $ptr
448 xprintsym $sym
449 echo \n
450 end
451 document xsymbol
452 Print the name and address of the symbol $.
453 This command assumes that $ is an Emacs Lisp symbol value.
454 end
455
456 define xstring
457 xgetptr $
458 print (struct Lisp_String *) $ptr
459 xprintstr $
460 echo \n
461 end
462 document xstring
463 Print the contents and address of the string $.
464 This command assumes that $ is an Emacs Lisp string value.
465 end
466
467 define xvector
468 xgetptr $
469 print (struct Lisp_Vector *) $ptr
470 output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
471 echo \n
472 end
473 document xvector
474 Print the contents and address of the vector $.
475 This command assumes that $ is an Emacs Lisp vector value.
476 end
477
478 define xprocess
479 xgetptr $
480 print (struct Lisp_Process *) $ptr
481 output *$
482 echo \n
483 end
484 document xprocess
485 Print the address of the struct Lisp_process which the Lisp_Object $ points to.
486 end
487
488 define xframe
489 xgetptr $
490 print (struct frame *) $ptr
491 end
492 document xframe
493 Print $ as a frame pointer, assuming it is an Emacs Lisp frame value.
494 end
495
496 define xcompiled
497 xgetptr $
498 print (struct Lisp_Vector *) $ptr
499 output ($->contents[0])@($->size & 0xff)
500 end
501 document xcompiled
502 Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value.
503 end
504
505 define xwindow
506 xgetptr $
507 print (struct window *) $ptr
508 printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top
509 end
510 document xwindow
511 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
512 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
513 end
514
515 define xwinconfig
516 xgetptr $
517 print (struct save_window_data *) $ptr
518 end
519 document xwinconfig
520 Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value.
521 end
522
523 define xsubr
524 xgetptr $
525 print (struct Lisp_Subr *) $ptr
526 output *$
527 echo \n
528 end
529 document xsubr
530 Print the address of the subr which the Lisp_Object $ points to.
531 end
532
533 define xchartable
534 xgetptr $
535 print (struct Lisp_Char_Table *) $ptr
536 printf "Purpose: "
537 xprintsym $->purpose
538 printf " %d extra slots", ($->size & 0x1ff) - 388
539 echo \n
540 end
541 document xchartable
542 Print the address of the char-table $, and its purpose.
543 This command assumes that $ is an Emacs Lisp char-table value.
544 end
545
546 define xboolvector
547 xgetptr $
548 print (struct Lisp_Bool_Vector *) $ptr
549 output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
550 echo \n
551 end
552 document xboolvector
553 Print the contents and address of the bool-vector $.
554 This command assumes that $ is an Emacs Lisp bool-vector value.
555 end
556
557 define xbuffer
558 xgetptr $
559 print (struct buffer *) $ptr
560 xgetptr $->name
561 output ((struct Lisp_String *) $ptr)->data
562 echo \n
563 end
564 document xbuffer
565 Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value.
566 Print the name of the buffer.
567 end
568
569 define xhashtable
570 xgetptr $
571 print (struct Lisp_Hash_Table *) $ptr
572 end
573 document xhashtable
574 Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value.
575 end
576
577 define xcons
578 xgetptr $
579 print (struct Lisp_Cons *) $ptr
580 output/x *$
581 echo \n
582 end
583 document xcons
584 Print the contents of $, assuming it is an Emacs Lisp cons.
585 end
586
587 define nextcons
588 p $.cdr
589 xcons
590 end
591 document nextcons
592 Print the contents of the next cell in a list.
593 This assumes that the last thing you printed was a cons cell contents
594 (type struct Lisp_Cons) or a pointer to one.
595 end
596 define xcar
597 xgetptr $
598 xgettype $
599 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
600 end
601 document xcar
602 Print the car of $, assuming it is an Emacs Lisp pair.
603 end
604
605 define xcdr
606 xgetptr $
607 xgettype $
608 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->cdr : 0)
609 end
610 document xcdr
611 Print the cdr of $, assuming it is an Emacs Lisp pair.
612 end
613
614 define xfloat
615 xgetptr $
616 print ((struct Lisp_Float *) $ptr)->data
617 end
618 document xfloat
619 Print $ assuming it is a lisp floating-point number.
620 end
621
622 define xscrollbar
623 xgetptr $
624 print (struct scrollbar *) $ptr
625 output *$
626 echo \n
627 end
628 document xscrollbar
629 Print $ as a scrollbar pointer.
630 end
631
632 define xprintstr
633 set $data = $arg0->data
634 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
635 end
636
637 define xprintsym
638 xgetptr $arg0
639 set $sym = (struct Lisp_Symbol *) $ptr
640 xgetptr $sym->xname
641 set $sym_name = (struct Lisp_String *) $ptr
642 xprintstr $sym_name
643 end
644 document xprintsym
645 Print argument as a symbol.
646 end
647
648 define xbacktrace
649 set $bt = backtrace_list
650 while $bt
651 xgettype (*$bt->function)
652 if $type == Lisp_Symbol
653 xprintsym (*$bt->function)
654 echo \n
655 else
656 printf "0x%x ", *$bt->function
657 if $type == Lisp_Vectorlike
658 xgetptr (*$bt->function)
659 set $size = ((struct Lisp_Vector *) $ptr)->size
660 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
661 else
662 printf "Lisp type %d", $type
663 end
664 echo \n
665 end
666 set $bt = $bt->next
667 end
668 end
669 document xbacktrace
670 Print a backtrace of Lisp function calls from backtrace_list.
671 Set a breakpoint at Fsignal and call this to see from where
672 an error was signaled.
673 end
674
675 define xreload
676 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
677 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
678 end
679 document xreload
680 When starting Emacs a second time in the same gdb session under
681 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
682 their values. (The same happens on current (2000) versions of GNU/Linux
683 with gdb 5.0.)
684 This function reloads them.
685 end
686 xreload
687
688 # Flush display (X only)
689 define ff
690 set x_flush (0)
691 end
692 document ff
693 Flush pending X window display updates to screen.
694 Works only when an inferior emacs is executing.
695 end
696
697
698 define hook-run
699 xreload
700 end
701
702 # Call xreload if a new Emacs executable is loaded.
703 define hookpost-run
704 xreload
705 end
706
707 set print pretty on
708 set print sevenbit-strings
709
710 show environment DISPLAY
711 show environment TERM
712 #set args -geometry 80x40+0+0
713
714 # Don't let abort actually run, as it will make
715 # stdio stop working and therefore the `pr' command above as well.
716 break abort
717
718 # If we are running in synchronous mode, we want a chance to look around
719 # before Emacs exits. Perhaps we should put the break somewhere else
720 # instead...
721 break x_error_quitter
722
723 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe