]> code.delx.au - gnu-emacs/blob - src/.gdbinit
*** empty log message ***
[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., 59 Temple Place - Suite 330,
19 # Boston, MA 02111-1307, 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 " stop=%d ", $it->stop_charpos
116 output $it->what
117 if ($it->what == IT_CHARACTER)
118 if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
119 printf "['%c']", $it->c
120 else
121 printf "[%d,%d]", $it->c, $it->len
122 end
123 end
124 printf " next="
125 output $it->method
126 printf "\n"
127 printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
128 printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
129 printf " x=%d lvx=%d", $it->current_x, $it->last_visible_x
130 printf " a+d=%d+%d=%d", $it->ascent, $it->descent, $it->ascent+$it->descent
131 printf " max=%d+%d=%d", $it->max_ascent, $it->max_descent, $it->max_ascent+$it->max_descent
132 printf "\n"
133 end
134 document pitx
135 Pretty print a display iterator.
136 Take one arg, an iterator object or pointer.
137 end
138
139 define pit
140 pitx it
141 end
142 document pit
143 Pretty print the display iterator it.
144 end
145
146 define prowx
147 set $row = $arg0
148 printf "y=%d x=%d pwid=%d", $row->y, $row->x, $row->pixel_width
149 printf " a+d=%d+%d=%d", $row->ascent, $row->height-$row->ascent, $row->height
150 printf " phys=%d+%d=%d", $row->phys_ascent, $row->phys_height-$row->phys_ascent, $row->phys_height
151 printf " vis=%d", $row->visible_height
152 printf " L=%d T=%d R=%d", $row->used[0], $row->used[1], $row->used[2]
153 printf "\n"
154 printf "start=%d end=%d", $row->start.pos.charpos, $row->end.pos.charpos
155 if ($row->enabled_p)
156 printf " ENA"
157 end
158 if ($row->displays_text_p)
159 printf " DISP"
160 end
161 if ($row->mode_line_p)
162 printf " MODEL"
163 end
164 if ($row->continued_p)
165 printf " CONT"
166 end
167 if ($row-> truncated_on_left_p)
168 printf " TRUNC:L"
169 end
170 if ($row-> truncated_on_right_p)
171 printf " TRUNC:R"
172 end
173 if ($row->starts_in_middle_of_char_p)
174 printf " STARTMID"
175 end
176 if ($row->ends_in_middle_of_char_p)
177 printf " ENDMID"
178 end
179 if ($row->ends_in_newline_from_string_p)
180 printf " ENDNLFS"
181 end
182 if ($row->ends_at_zv_p)
183 printf " ENDZV"
184 end
185 if ($row->overlapped_p)
186 printf " OLAPD"
187 end
188 if ($row->overlapping_p)
189 printf " OLAPNG"
190 end
191 printf "\n"
192 end
193 document prowx
194 Pretty print information about glyph_row.
195 Takes one argument, a row object or pointer.
196 end
197
198 define prow
199 prowx row
200 end
201 document prow
202 Pretty print information about glyph_row in row.
203 end
204
205
206 define pcursorx
207 set $cp = $arg0
208 printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
209 end
210 document pcursorx
211 Pretty print a window cursor
212 end
213
214 define pcursor
215 printf "output: "
216 pcursorx output_cursor
217 printf "\n"
218 end
219 document pcursor
220 Pretty print the output_cursor
221 end
222
223 define pwinx
224 set $w = $arg0
225 xgetint $w->sequence_number
226 if ($w->mini_p != Qnil)
227 printf "Mini "
228 end
229 printf "Window %d ", $int
230 xgetptr $w->buffer
231 set $tem = (struct buffer *) $ptr
232 xgetptr $tem->name
233 printf "%s", ((struct Lisp_String *) $ptr)->data
234 printf "\n"
235 xgetptr $w->start
236 set $tem = (struct Lisp_Marker *) $ptr
237 printf "start=%d end:", $tem->charpos
238 if ($w->window_end_valid != Qnil)
239 xgetint $w->window_end_pos
240 printf "pos=%d", $int
241 xgetint $w->window_end_vpos
242 printf " vpos=%d", $int
243 else
244 printf "invalid"
245 end
246 printf " vscroll=%d", $w->vscroll
247 if ($w->force_start != Qnil)
248 printf " FORCE_START"
249 end
250 if ($w->must_be_updated_p)
251 printf " MUST_UPD"
252 end
253 printf "\n"
254 printf "cursor: "
255 pcursorx $w->cursor
256 printf " phys: "
257 pcursorx $w->phys_cursor
258 if ($w->phys_cursor_on_p)
259 printf " ON"
260 else
261 printf " OFF"
262 end
263 printf " blk="
264 if ($w->last_cursor_off_p != $w->cursor_off_p)
265 if ($w->last_cursor_off_p)
266 printf "ON->"
267 else
268 printf "OFF->"
269 end
270 end
271 if ($w->cursor_off_p)
272 printf "ON"
273 else
274 printf "OFF"
275 end
276 printf "\n"
277 end
278 document pwinx
279 Pretty print a window structure.
280 Takes one argument, a pointer to a window structure
281 end
282
283 define pwin
284 pwinx w
285 end
286 document pwin
287 Pretty print window structure w.
288 end
289
290
291 define xtype
292 xgettype $
293 output $type
294 echo \n
295 if $type == Lisp_Misc
296 xmisctype
297 else
298 if $type == Lisp_Vectorlike
299 xvectype
300 end
301 end
302 end
303 document xtype
304 Print the type of $, assuming it is an Emacs Lisp value.
305 If the first type printed is Lisp_Vector or Lisp_Misc,
306 a second line gives the more precise type.
307 end
308
309 define xvectype
310 xgetptr $
311 set $size = ((struct Lisp_Vector *) $ptr)->size
312 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
313 echo \n
314 end
315 document xvectype
316 Print the size or vector subtype of $, assuming it is a vector or pseudovector.
317 end
318
319 define xmisctype
320 xgetptr $
321 output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
322 echo \n
323 end
324 document xmisctype
325 Print the specific type of $, assuming it is some misc type.
326 end
327
328 define xint
329 xgetint $
330 print $int
331 end
332 document xint
333 Print $, assuming it is an Emacs Lisp integer. This gets the sign right.
334 end
335
336 define xptr
337 xgetptr $
338 print (void *) $ptr
339 end
340 document xptr
341 Print the pointer portion of $, assuming it is an Emacs Lisp value.
342 end
343
344 define xmarker
345 xgetptr $
346 print (struct Lisp_Marker *) $ptr
347 end
348 document xmarker
349 Print $ as a marker pointer, assuming it is an Emacs Lisp marker value.
350 end
351
352 define xoverlay
353 xgetptr $
354 print (struct Lisp_Overlay *) $ptr
355 end
356 document xoverlay
357 Print $ as a overlay pointer, assuming it is an Emacs Lisp overlay value.
358 end
359
360 define xmiscfree
361 xgetptr $
362 print (struct Lisp_Free *) $ptr
363 end
364 document xmiscfree
365 Print $ as a misc free-cell pointer, assuming it is an Emacs Lisp Misc value.
366 end
367
368 define xintfwd
369 xgetptr $
370 print (struct Lisp_Intfwd *) $ptr
371 end
372 document xintfwd
373 Print $ as an integer forwarding pointer, assuming it is an Emacs Lisp Misc value.
374 end
375
376 define xboolfwd
377 xgetptr $
378 print (struct Lisp_Boolfwd *) $ptr
379 end
380 document xboolfwd
381 Print $ as a boolean forwarding pointer, assuming it is an Emacs Lisp Misc value.
382 end
383
384 define xobjfwd
385 xgetptr $
386 print (struct Lisp_Objfwd *) $ptr
387 end
388 document xobjfwd
389 Print $ as an object forwarding pointer, assuming it is an Emacs Lisp Misc value.
390 end
391
392 define xbufobjfwd
393 xgetptr $
394 print (struct Lisp_Buffer_Objfwd *) $ptr
395 end
396 document xbufobjfwd
397 Print $ as a buffer-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
398 end
399
400 define xkbobjfwd
401 xgetptr $
402 print (struct Lisp_Kboard_Objfwd *) $ptr
403 end
404 document xkbobjfwd
405 Print $ as a kboard-local object forwarding pointer, assuming it is an Emacs Lisp Misc value.
406 end
407
408 define xbuflocal
409 xgetptr $
410 print (struct Lisp_Buffer_Local_Value *) $ptr
411 end
412 document xbuflocal
413 Print $ as a buffer-local-value pointer, assuming it is an Emacs Lisp Misc value.
414 end
415
416 define xsymbol
417 set $sym = $
418 xgetptr $sym
419 print (struct Lisp_Symbol *) $ptr
420 xprintsym $sym
421 echo \n
422 end
423 document xsymbol
424 Print the name and address of the symbol $.
425 This command assumes that $ is an Emacs Lisp symbol value.
426 end
427
428 define xstring
429 xgetptr $
430 print (struct Lisp_String *) $ptr
431 xprintstr $
432 echo \n
433 end
434 document xstring
435 Print the contents and address of the string $.
436 This command assumes that $ is an Emacs Lisp string value.
437 end
438
439 define xvector
440 xgetptr $
441 print (struct Lisp_Vector *) $ptr
442 output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
443 echo \n
444 end
445 document xvector
446 Print the contents and address of the vector $.
447 This command assumes that $ is an Emacs Lisp vector value.
448 end
449
450 define xprocess
451 xgetptr $
452 print (struct Lisp_Process *) $ptr
453 output *$
454 echo \n
455 end
456 document xprocess
457 Print the address of the struct Lisp_process which the Lisp_Object $ points to.
458 end
459
460 define xframe
461 xgetptr $
462 print (struct frame *) $ptr
463 end
464 document xframe
465 Print $ as a frame pointer, assuming it is an Emacs Lisp frame value.
466 end
467
468 define xcompiled
469 xgetptr $
470 print (struct Lisp_Vector *) $ptr
471 output ($->contents[0])@($->size & 0xff)
472 end
473 document xcompiled
474 Print $ as a compiled function pointer, assuming it is an Emacs Lisp compiled value.
475 end
476
477 define xwindow
478 xgetptr $
479 print (struct window *) $ptr
480 printf "%dx%d+%d+%d\n", $->width, $->height, $->left, $->top
481 end
482 document xwindow
483 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
484 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
485 end
486
487 define xwinconfig
488 xgetptr $
489 print (struct save_window_data *) $ptr
490 end
491 document xwinconfig
492 Print $ as a window configuration pointer, assuming it is an Emacs Lisp window configuration value.
493 end
494
495 define xsubr
496 xgetptr $
497 print (struct Lisp_Subr *) $ptr
498 output *$
499 echo \n
500 end
501 document xsubr
502 Print the address of the subr which the Lisp_Object $ points to.
503 end
504
505 define xchartable
506 xgetptr $
507 print (struct Lisp_Char_Table *) $ptr
508 printf "Purpose: "
509 xprintsym $->purpose
510 printf " %d extra slots", ($->size & 0x1ff) - 388
511 echo \n
512 end
513 document xchartable
514 Print the address of the char-table $, and its purpose.
515 This command assumes that $ is an Emacs Lisp char-table value.
516 end
517
518 define xboolvector
519 xgetptr $
520 print (struct Lisp_Bool_Vector *) $ptr
521 output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
522 echo \n
523 end
524 document xboolvector
525 Print the contents and address of the bool-vector $.
526 This command assumes that $ is an Emacs Lisp bool-vector value.
527 end
528
529 define xbuffer
530 xgetptr $
531 print (struct buffer *) $ptr
532 xgetptr $->name
533 output ((struct Lisp_String *) $ptr)->data
534 echo \n
535 end
536 document xbuffer
537 Set $ as a buffer pointer, assuming it is an Emacs Lisp buffer value.
538 Print the name of the buffer.
539 end
540
541 define xhashtable
542 xgetptr $
543 print (struct Lisp_Hash_Table *) $ptr
544 end
545 document xhashtable
546 Set $ as a hash table pointer, assuming it is an Emacs Lisp hash table value.
547 end
548
549 define xcons
550 xgetptr $
551 print (struct Lisp_Cons *) $ptr
552 output/x *$
553 echo \n
554 end
555 document xcons
556 Print the contents of $, assuming it is an Emacs Lisp cons.
557 end
558
559 define nextcons
560 p $.cdr
561 xcons
562 end
563 document nextcons
564 Print the contents of the next cell in a list.
565 This assumes that the last thing you printed was a cons cell contents
566 (type struct Lisp_Cons) or a pointer to one.
567 end
568 define xcar
569 xgetptr $
570 xgettype $
571 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
572 end
573 document xcar
574 Print the car of $, assuming it is an Emacs Lisp pair.
575 end
576
577 define xcdr
578 xgetptr $
579 xgettype $
580 print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->cdr : 0)
581 end
582 document xcdr
583 Print the cdr of $, assuming it is an Emacs Lisp pair.
584 end
585
586 define xfloat
587 xgetptr $
588 print ((struct Lisp_Float *) $ptr)->data
589 end
590 document xfloat
591 Print $ assuming it is a lisp floating-point number.
592 end
593
594 define xscrollbar
595 xgetptr $
596 print (struct scrollbar *) $ptr
597 output *$
598 echo \n
599 end
600 document xscrollbar
601 Print $ as a scrollbar pointer.
602 end
603
604 define xprintstr
605 set $data = $arg0->data
606 output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
607 end
608
609 define xprintsym
610 xgetptr $arg0
611 set $sym = (struct Lisp_Symbol *) $ptr
612 xgetptr $sym->xname
613 set $sym_name = (struct Lisp_String *) $ptr
614 xprintstr $sym_name
615 end
616 document xprintsym
617 Print argument as a symbol.
618 end
619
620 define xbacktrace
621 set $bt = backtrace_list
622 while $bt
623 xgettype (*$bt->function)
624 if $type == Lisp_Symbol
625 xprintsym (*$bt->function)
626 echo \n
627 else
628 printf "0x%x ", *$bt->function
629 if $type == Lisp_Vectorlike
630 xgetptr (*$bt->function)
631 set $size = ((struct Lisp_Vector *) $ptr)->size
632 output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
633 else
634 printf "Lisp type %d", $type
635 end
636 echo \n
637 end
638 set $bt = $bt->next
639 end
640 end
641 document xbacktrace
642 Print a backtrace of Lisp function calls from backtrace_list.
643 Set a breakpoint at Fsignal and call this to see from where
644 an error was signaled.
645 end
646
647 define xreload
648 set $tagmask = (((long)1 << gdb_gctypebits) - 1)
649 set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
650 end
651 document xreload
652 When starting Emacs a second time in the same gdb session under
653 FreeBSD 2.2.5, gdb 4.13, $valmask have lost
654 their values. (The same happens on current (2000) versions of GNU/Linux
655 with gdb 5.0.)
656 This function reloads them.
657 end
658 xreload
659
660 # Flush display (X only)
661 define ff
662 set x_flush (0)
663 end
664 document ff
665 Flush pending X window display updates to screen.
666 Works only when an inferior emacs is executing.
667 end
668
669
670 define hook-run
671 xreload
672 end
673
674 # Call xreload if a new Emacs executable is loaded.
675 define hookpost-run
676 xreload
677 end
678
679 set print pretty on
680 set print sevenbit-strings
681
682 show environment DISPLAY
683 show environment TERM
684 set args -geometry 80x40+0+0
685
686 # Don't let abort actually run, as it will make
687 # stdio stop working and therefore the `pr' command above as well.
688 break abort
689
690 # If we are running in synchronous mode, we want a chance to look around
691 # before Emacs exits. Perhaps we should put the break somewhere else
692 # instead...
693 break x_error_quitter
694
695 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe