* lisp/obsolete/old-whitespace.el (whitespace-rescan-files-in-buffers):
[emacs.git] / src / .gdbinit
blobb3bb6b58267f76ae016685944702782a9342806c
1 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
2 #   2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 #   Free Software Foundation, Inc.
5 # This file is part of GNU Emacs.
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
9 # the Free Software Foundation; either version 3, or (at your option)
10 # any later version.
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.
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
19 # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 # Boston, MA 02110-1301, USA.
22 # Force loading of symbols, enough to give us gdb_valbits etc.
23 set main
24 # With some compilers, we need this to give us struct Lisp_Symbol etc.:
25 set Fmake_symbol
27 # Find lwlib source files too.
28 dir ../lwlib
29 #dir /gd/gnu/lesstif-0.89.9/lib/Xm
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.
35 handle 2 noprint pass
37 # Make it work like SIGINT normally does.
38 handle SIGTSTP nopass
40 # Pass on user signals
41 handle SIGUSR1 noprint pass
42 handle SIGUSR2 noprint pass
44 # Don't pass SIGALRM to Emacs.  This makes problems when
45 # debugging.
46 handle SIGALRM ignore
48 # $valmask and $tagmask are mask values set up by the xreload macro below.
50 # Use $bugfix so that the value isn't a constant.
51 # Using a constant runs into GDB bugs sometimes.
52 define xgetptr
53   set $bugfix = $arg0
54   set $ptr = (gdb_use_union ? $bugfix.u.val : $bugfix & $valmask) | gdb_data_seg_bits
55 end
57 define xgetint
58   set $bugfix = $arg0
59   set $int = gdb_use_union ? $bugfix.s.val : (gdb_use_lsb ? $bugfix : $bugfix << gdb_gctypebits) >> gdb_gctypebits
60 end
62 define xgettype
63   set $bugfix = $arg0
64   set $type = gdb_use_union ? $bugfix.s.type : (enum Lisp_Type) (gdb_use_lsb ? $bugfix & $tagmask : $bugfix >> gdb_valbits)
65 end
67 # Set up something to print out s-expressions.
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!).
71 define pr
72   set $output_debug = print_output_debug_flag
73   set print_output_debug_flag = 0
74   set debug_print ($)
75   set print_output_debug_flag = $output_debug
76 end
77 document pr
78 Print the emacs s-expression which is $.
79 Works only when an inferior emacs is executing.
80 end
82 # Print out s-expressions
83 define pp
84   set $tmp = $arg0
85   set $output_debug = print_output_debug_flag
86   set print_output_debug_flag = 0
87   set safe_debug_print ($tmp)
88   set print_output_debug_flag = $output_debug
89 end
90 document pp
91 Print the argument as an emacs s-expression
92 Works only when an inferior emacs is executing.
93 end
95 # Print out s-expressions from tool bar
96 define pp1
97   set $tmp = $arg0
98   set $output_debug = print_output_debug_flag
99   set print_output_debug_flag = 0
100   set safe_debug_print ($tmp)
101   set print_output_debug_flag = $output_debug
103 document pp1
104 Print the argument as an emacs s-expression.
105 Works only when an inferior emacs is executing.
106 For use on tool bar when debugging in Emacs
107 where the variable name would not otherwise
108 be recorded in the GUD buffer.
111 # Print value of lisp variable
112 define pv
113   set $tmp = "$arg0"
114   set $output_debug = print_output_debug_flag
115   set print_output_debug_flag = 0
116   set safe_debug_print ( find_symbol_value (intern ($tmp)))
117   set print_output_debug_flag = $output_debug
119 document pv
120 Print the value of the lisp variable given as argument.
121 Works only when an inferior emacs is executing.
124 # Print value of lisp variable
125 define pv1
126   set $tmp = "$arg0"
127   set $output_debug = print_output_debug_flag
128   set print_output_debug_flag = 0
129   set safe_debug_print (find_symbol_value (intern ($tmp)))
130   set print_output_debug_flag = $output_debug
132 document pv1
133 Print the value of the lisp variable given as argument.
134 Works only when an inferior emacs is executing.
135 For use when debugging in Emacs where the variable
136 name would not otherwise be recorded in the GUD buffer.
139 # Print out current buffer point and boundaries
140 define 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
163 document ppt
164 Print current buffer's point and boundaries.
165 Prints values of point, beg, end, narrow, and gap for current buffer.
168 define 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
193 document pitmethod
194 Pretty print it->method given as first arg
197 # Print out iterator given as first arg
198 define 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
204   printf " pos=%d", $it->position.charpos
205   if ($it->position.charpos != $it->position.bytepos)
206     printf "[%d]", $it->position.bytepos
207   end
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
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)
222     printf " nov=%d", $it->n_overlay_strings
223   end
224   if ($it->sp != 0)
225     printf " sp=%d", $it->sp
226   end
227   # IT_CHARACTER
228   if ($it->what == 0)
229     if ($it->len == 1 && $it->c >= ' ' && it->c < 255)
230       printf " ch='%c'", $it->c
231     else
232       printf " ch=[%d,%d]", $it->c, $it->len
233     end
234   else
235     printf " "
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
261   end
262   if ($it->method != 0)
263     # !GET_FROM_BUFFER
264     printf " next="
265     pitmethod $it->method
266     if ($it->method == 2)
267       # GET_FROM_STRING
268       printf "[%d]", $it->current.string_pos.charpos
269     end
270     if ($it->method == 4)
271       # GET_FROM_IMAGE
272       printf "[%d]", $it->image_id
273     end
274   end
275   printf "\n"
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
279   if ($it->region_beg_charpos >= 0)
280     printf "reg=%d-%d ", $it->region_beg_charpos, $it->region_end_charpos
281   end
282   printf "vpos=%d hpos=%d", $it->vpos, $it->hpos,
283   printf " y=%d lvy=%d", $it->current_y, $it->last_visible_y
284   printf " x=%d vx=%d-%d", $it->current_x, $it->first_visible_x, $it->last_visible_x
285   printf " w=%d", $it->pixel_width
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"
289   set $i = 0
290   while ($i < $it->sp && $i < 4)
291     set $e = $it->stack[$i]
292     printf "stack[%d]: ", $i
293     pitmethod $e->method
294     printf "[%d]", $e->position.charpos
295     printf "\n"
296     set $i = $i + 1
297   end
299 document pitx
300 Pretty print a display iterator.
301 Take one arg, an iterator object or pointer.
304 define pit
305   pitx it
307 document pit
308 Pretty print the display iterator it.
311 define 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"
358 document prowx
359 Pretty print information about glyph_row.
360 Takes one argument, a row object or pointer.
363 define prow
364   prowx row
366 document prow
367 Pretty print information about glyph_row in row.
371 define pcursorx
372   set $cp = $arg0
373   printf "y=%d x=%d vpos=%d hpos=%d", $cp->y, $cp->x, $cp->vpos, $cp->hpos
375 document pcursorx
376 Pretty print a window cursor.
379 define pcursor
380   printf "output: "
381   pcursorx output_cursor
382   printf "\n"
384 document pcursor
385 Pretty print the output_cursor.
388 define 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"
443 document pwinx
444 Pretty print a window structure.
445 Takes one argument, a pointer to a window structure.
448 define pwin
449   pwinx w
451 document pwin
452 Pretty print window structure w.
455 define pbiditype
456   if ($arg0 == 0)
457     printf "UNDEF"
458   end
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
477   if ($arg0 < 0 || $arg0 > 6)
478     printf "%d??", $arg0
479   end
481 document pbiditype
482 Print textual description of bidi type given as first argument.
485 define pgx
486   set $g = $arg0
487   # CHAR_GLYPH
488   if ($g->type == 0)
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
495   # COMPOSITE_GLYPH
496   if ($g->type == 1)
497     printf "COMP[%d (%d..%d)]", $g->u.cmp.id, $g->u.cmp.from, $g->u.cmp.to
498   end
499   # IMAGE_GLYPH
500   if ($g->type == 2)
501     printf "IMAGE[%d]", $g->u.img_id
502   end
503   # STRETCH_GLYPH
504   if ($g->type == 3)
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
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
518   printf " w=%d a+d=%d+%d", $g->pixel_width, $g->ascent, $g->descent
519   # If not DEFAULT_FACE_ID
520   if ($g->face_id != 0)
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
538   if ($g->avoid_cursor_p)
539     printf " AVOID"
540   end
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"
552 document pgx
553 Pretty print a glyph structure.
554 Takes one argument, a pointer to a glyph structure.
557 define pg
558   set $pgidx = 0
559   pgx glyph
561 document pg
562 Pretty print glyph structure glyph.
565 define pgi
566   set $pgidx = $arg0
567   pgx (&glyph[$pgidx])
569 document pgi
570 Pretty print glyph structure glyph[I].
571 Takes one argument, a integer I.
574 define pgn
575   set $pgidx = $pgidx + 1
576   pgx (&glyph[$pgidx])
578 document pgn
579 Pretty print next glyph structure.
582 define 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
602 document pgrowx
603 Pretty print all glyphs in a row structure.
604 Takes one argument, a pointer to a row structure.
607 define pgrow
608   pgrowx row
610 document pgrow
611 Pretty print all glyphs in row structure row.
614 define pgrowit
615   pgrowx it->glyph_row
617 document pgrowit
618 Pretty print all glyphs in it->glyph_row.
621 define prowlims
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
624 document prowlims
625 Print important attributes of a glyph_row structure.
626 Takes one argument, a pointer to a glyph_row structure.
629 define pmtxrows
630   set $mtx = $arg0
631   set $gl = $mtx->rows
632   set $glend = $mtx->rows + $mtx->nrows - 1
633   set $i = 0
634   while ($gl < $glend)
635     printf "%d: ", $i
636     prowlims $gl
637     set $gl = $gl + 1
638     set $i = $i + 1
639   end
641 document pmtxrows
642 Print data about glyph rows in a glyph matrix.
643 Takes one argument, a pointer to a glyph_matrix structure.
646 define xtype
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
658 document xtype
659 Print the type of $, assuming it is an Emacs Lisp value.
660 If the first type printed is Lisp_Vector or Lisp_Misc,
661 a second line gives the more precise type.
664 define xvectype
665   xgetptr $
666   set $size = ((struct Lisp_Vector *) $ptr)->size
667   output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
668   echo \n
670 document xvectype
671 Print the size or vector subtype of $.
672 This command assumes that $ is a vector or pseudovector.
675 define xmisctype
676   xgetptr $
677   output (enum Lisp_Misc_Type) (((struct Lisp_Free *) $ptr)->type)
678   echo \n
680 document xmisctype
681 Assume that $ is some misc type and print its specific type.
684 define xint
685   xgetint $
686   print $int
688 document xint
689 Print $ as an Emacs Lisp integer.  This gets the sign right.
692 define xptr
693   xgetptr $
694   print (void *) $ptr
696 document xptr
697 Print the pointer portion of an Emacs Lisp value in $.
700 define xmarker
701   xgetptr $
702   print (struct Lisp_Marker *) $ptr
704 document xmarker
705 Print $ as a marker pointer.
706 This command assumes that $ is an Emacs Lisp marker value.
709 define xoverlay
710   xgetptr $
711   print (struct Lisp_Overlay *) $ptr
713 document xoverlay
714 Print $ as a overlay pointer.
715 This command assumes that $ is an Emacs Lisp overlay value.
718 define xmiscfree
719   xgetptr $
720   print (struct Lisp_Free *) $ptr
722 document xmiscfree
723 Print $ as a misc free-cell pointer.
724 This command assumes that $ is an Emacs Lisp Misc value.
727 define xintfwd
728   xgetptr $
729   print (struct Lisp_Intfwd *) $ptr
731 document xintfwd
732 Print $ as an integer forwarding pointer.
733 This command assumes that $ is an Emacs Lisp Misc value.
736 define xboolfwd
737   xgetptr $
738   print (struct Lisp_Boolfwd *) $ptr
740 document xboolfwd
741 Print $ as a boolean forwarding pointer.
742 This command assumes that $ is an Emacs Lisp Misc value.
745 define xobjfwd
746   xgetptr $
747   print (struct Lisp_Objfwd *) $ptr
749 document xobjfwd
750 Print $ as an object forwarding pointer.
751 This command assumes that $ is an Emacs Lisp Misc value.
754 define xbufobjfwd
755   xgetptr $
756   print (struct Lisp_Buffer_Objfwd *) $ptr
758 document xbufobjfwd
759 Print $ as a buffer-local object forwarding pointer.
760 This command assumes that $ is an Emacs Lisp Misc value.
763 define xkbobjfwd
764   xgetptr $
765   print (struct Lisp_Kboard_Objfwd *) $ptr
767 document xkbobjfwd
768 Print $ as a kboard-local object forwarding pointer.
769 This command assumes that $ is an Emacs Lisp Misc value.
772 define xbuflocal
773   xgetptr $
774   print (struct Lisp_Buffer_Local_Value *) $ptr
776 document xbuflocal
777 Print $ as a buffer-local-value pointer.
778 This command assumes that $ is an Emacs Lisp Misc value.
781 define xsymbol
782   set $sym = $
783   xgetptr $sym
784   print (struct Lisp_Symbol *) $ptr
785   xprintsym $sym
786   echo \n
788 document xsymbol
789 Print the name and address of the symbol $.
790 This command assumes that $ is an Emacs Lisp symbol value.
793 define xstring
794   xgetptr $
795   print (struct Lisp_String *) $ptr
796   xprintstr $
797   echo \n
799 document xstring
800 Print the contents and address of the string $.
801 This command assumes that $ is an Emacs Lisp string value.
804 define xvector
805   xgetptr $
806   print (struct Lisp_Vector *) $ptr
807   output ($->size > 50) ? 0 : ($->contents[0])@($->size & ~gdb_array_mark_flag)
808 echo \n
810 document xvector
811 Print the contents and address of the vector $.
812 This command assumes that $ is an Emacs Lisp vector value.
815 define xprocess
816   xgetptr $
817   print (struct Lisp_Process *) $ptr
818   output *$
819   echo \n
821 document xprocess
822 Print the address of the struct Lisp_process to which $ points.
823 This command assumes that $ is a Lisp_Object.
826 define xframe
827   xgetptr $
828   print (struct frame *) $ptr
829   xgetptr $->name
830   set $ptr = (struct Lisp_String *) $ptr
831   xprintstr $ptr
832   echo \n
834 document xframe
835 Print $ as a frame pointer.
836 This command assumes $ is an Emacs Lisp frame value.
839 define xcompiled
840   xgetptr $
841   print (struct Lisp_Vector *) $ptr
842   output ($->contents[0])@($->size & 0xff)
844 document xcompiled
845 Print $ as a compiled function pointer.
846 This command assumes that $ is an Emacs Lisp compiled value.
849 define xwindow
850   xgetptr $
851   print (struct window *) $ptr
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
863 document xwindow
864 Print $ as a window pointer, assuming it is an Emacs Lisp window value.
865 Print the window's position as "WIDTHxHEIGHT+LEFT+TOP".
868 define xwinconfig
869   xgetptr $
870   print (struct save_window_data *) $ptr
872 document xwinconfig
873 Print $ as a window configuration pointer.
874 This command assumes that $ is an Emacs Lisp window configuration value.
877 define xsubr
878   xgetptr $
879   print (struct Lisp_Subr *) $ptr
880   output *$
881   echo \n
883 document xsubr
884 Print the address of the subr which the Lisp_Object $ points to.
887 define xchartable
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
895 document xchartable
896 Print the address of the char-table $, and its purpose.
897 This command assumes that $ is an Emacs Lisp char-table value.
900 define 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
908 document xsubchartable
909 Print the address of the sub-char-table $, its depth and min-char.
910 This command assumes that $ is an Emacs Lisp sub-char-table value.
913 define xboolvector
914   xgetptr $
915   print (struct Lisp_Bool_Vector *) $ptr
916   output ($->size > 256) ? 0 : ($->data[0])@((($->size & ~gdb_array_mark_flag) + 7)/ 8)
917   echo \n
919 document xboolvector
920 Print the contents and address of the bool-vector $.
921 This command assumes that $ is an Emacs Lisp bool-vector value.
924 define xbuffer
925   xgetptr $
926   print (struct buffer *) $ptr
927   xgetptr $->name
928   output ((struct Lisp_String *) $ptr)->data
929   echo \n
931 document xbuffer
932 Set $ as a buffer pointer and the name of the buffer.
933 This command assumes $ is an Emacs Lisp buffer value.
936 define xhashtable
937   xgetptr $
938   print (struct Lisp_Hash_Table *) $ptr
940 document xhashtable
941 Set $ as a hash table pointer.
942 This command assumes that $ is an Emacs Lisp hash table value.
945 define xcons
946   xgetptr $
947   print (struct Lisp_Cons *) $ptr
948   output/x *$
949   echo \n
951 document xcons
952 Print the contents of $ as an Emacs Lisp cons.
955 define nextcons
956   p $.u.cdr
957   xcons
959 document nextcons
960 Print the contents of the next cell in a list.
961 This command assumes that the last thing you printed was a cons cell contents
962 (type struct Lisp_Cons) or a pointer to one.
964 define xcar
965   xgetptr $
966   xgettype $
967   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->car : 0)
969 document xcar
970 Assume that $ is an Emacs Lisp pair and print its car.
973 define xcdr
974   xgetptr $
975   xgettype $
976   print/x ($type == Lisp_Cons ? ((struct Lisp_Cons *) $ptr)->u.cdr : 0)
978 document xcdr
979 Assume that $ is an Emacs Lisp pair and print its cdr.
982 define 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
1003 document xlist
1004 Print $ assuming it is a list.
1007 define xfloat
1008   xgetptr $
1009   print ((struct Lisp_Float *) $ptr)->u.data
1011 document xfloat
1012 Print $ assuming it is a lisp floating-point number.
1015 define xscrollbar
1016   xgetptr $
1017   print (struct scrollbar *) $ptr
1018 output *$
1019 echo \n
1021 document xscrollbar
1022 Print $ as a scrollbar pointer.
1025 define 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
1123 document xpr
1124 Print $ as a lisp object of any type.
1127 define xprintstr
1128   set $data = (char *) $arg0->data
1129   output ($arg0->size > 1000) ? 0 : ($data[0])@($arg0->size_byte < 0 ? $arg0->size & ~gdb_array_mark_flag : $arg0->size_byte)
1132 define xprintsym
1133   xgetptr $arg0
1134   set $sym = (struct Lisp_Symbol *) $ptr
1135   xgetptr $sym->xname
1136   set $sym_name = (struct Lisp_String *) $ptr
1137   xprintstr $sym_name
1139 document xprintsym
1140   Print argument as a symbol.
1143 define 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
1152 document xcoding
1153   Print the name and attributes of coding system that has ID (argument).
1156 define 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)
1159   p $tmp->contents[charset_table[$arg0].hash_index * 2]
1160   pr
1162 document xcharset
1163   Print the name of charset that has ID (argument).
1166 define 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
1189 define 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
1202 document xfont
1203 Print $ assuming it is a list font (font-spec, font-entity, or font-object).
1206 define xbacktrace
1207   set $bt = backtrace_list
1208   while $bt
1209     xgettype (*$bt->function)
1210     if $type == Lisp_Symbol
1211       xprintsym (*$bt->function)
1212       printf " (0x%x)\n", $bt->args
1213     else
1214       printf "0x%x ", *$bt->function
1215       if $type == Lisp_Vectorlike
1216         xgetptr (*$bt->function)
1217         set $size = ((struct Lisp_Vector *) $ptr)->size
1218         output ($size & PVEC_FLAG) ? (enum pvec_type) ($size & PVEC_TYPE_MASK) : $size & ~gdb_array_mark_flag
1219       else
1220         printf "Lisp type %d", $type
1221       end
1222       echo \n
1223     end
1224     set $bt = $bt->next
1225   end
1227 document xbacktrace
1228   Print a backtrace of Lisp function calls from backtrace_list.
1229   Set a breakpoint at Fsignal and call this to see from where
1230   an error was signaled.
1233 define which
1234   set debug_print (which_symbols ($arg0))
1236 document which
1237   Print symbols which references a given lisp object
1238   either as its symbol value or symbol function.
1241 define 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
1250 document xbytecode
1251   Print a backtrace of the byte code stack.
1254 # Show Lisp backtrace after normal backtrace.
1255 define hookpost-backtrace
1256   set $bt = backtrace_list
1257   if $bt
1258     echo \n
1259     echo Lisp Backtrace:\n
1260     xbacktrace
1261   end
1264 define xreload
1265   set $tagmask = (((long)1 << gdb_gctypebits) - 1)
1266   set $valmask = gdb_use_lsb ? ~($tagmask) : ((long)1 << gdb_valbits) - 1
1268 document xreload
1269   When starting Emacs a second time in the same gdb session under
1270   FreeBSD 2.2.5, gdb 4.13, $valmask have lost
1271   their values.  (The same happens on current (2000) versions of GNU/Linux
1272   with gdb 5.0.)
1273   This function reloads them.
1275 xreload
1277 # Flush display (X only)
1278 define ff
1279   set x_flush (0)
1281 document ff
1282 Flush pending X window display updates to screen.
1283 Works only when an inferior emacs is executing.
1287 define hook-run
1288   xreload
1291 # Call xreload if a new Emacs executable is loaded.
1292 define hookpost-run
1293   xreload
1296 set print pretty on
1297 set print sevenbit-strings
1299 show environment DISPLAY
1300 show environment TERM
1302 # People get bothered when they see messages about non-existent functions...
1303 xgetptr Vsystem_type
1304 # $ptr is NULL in temacs
1305 if ($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
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
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.
1325 tbreak init_sys_modes
1326 commands
1327   silent
1328   xgetptr Vinitial_window_system
1329   set $tem = (struct Lisp_Symbol *) $ptr
1330   xgetptr $tem->xname
1331   set $tem = (struct Lisp_String *) $ptr
1332   set $tem = (char *) $tem->data
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...
1336   if $tem[0] == 'x' && $tem[1] == '\0'
1337     break x_error_quitter
1338   end
1339   continue
1341 # arch-tag: 12f34321-7bfa-4240-b77a-3cd3a1696dfe