comparison src/.gdbinit.in @ 3092:141c2920ea48

[xemacs-hg @ 2005-11-25 01:41:31 by crestani] Incremental Garbage Collector
author crestani
date Fri, 25 Nov 2005 01:42:08 +0000
parents
children
comparison
equal deleted inserted replaced
3091:c22d8984148c 3092:141c2920ea48
1 ## -*- ksh -*-
2 ## Copyright (C) 1998 Free Software Foundation, Inc.
3
4 ## This file is part of XEmacs.
5
6 ## XEmacs is free software; you can redistribute it and/or modify it
7 ## under the terms of the GNU General Public License as published by the
8 ## Free Software Foundation; either version 2, or (at your option) any
9 ## later version.
10
11 ## XEmacs is distributed in the hope that it will be useful, but WITHOUT
12 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 ## for more details.
15
16 ## You should have received a copy of the GNU General Public License
17 ## along with XEmacs; see the file COPYING. If not, write to
18 ## the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 ## Boston, MA 02111-1307, USA.
20
21 ## Author: Martin Buchholz
22
23 ## Some useful commands for debugging emacs with gdb 4.16 or better.
24 ##
25 ## Since this file is called `.gdbinit', it will be read by gdb
26 ## automatically when gdb is run in the build directory, which is where
27 ## developers usually debug their xemacs. You can also source this
28 ## file from your ~/.gdbinit, if you like.
29 ##
30 ## Configure xemacs with --debug, and compile with -g.
31 ##
32 ## See also the question of the XEmacs FAQ, titled
33 ## "How to Debug an XEmacs problem with a debugger".
34 ##
35 ## This can be used to debug XEmacs no matter how the following are
36 ## specified:
37
38 ## USE_UNION_TYPE
39
40 ## (the above all have configure equivalents)
41
42 ## Some functions defined here require a running process, but most
43 ## don't. Considerable effort has been expended to this end.
44
45 ## See the dbg_ C support code in src/alloc.c that allows the functions
46 ## defined in this file to work correctly.
47
48 #define NOT_C_CODE
49 #include "config.h"
50
51 set print union off
52 set print pretty off
53
54 #ifdef VDB_POSIX
55 handle SIGSEGV SIGBUS nostop noprint
56 #endif
57
58 set $Lisp_Type_Int = -2
59
60 define decode_object
61 set $obj = (unsigned long) $arg0
62 if $obj & 1
63 ## It's an int
64 set $val = $obj >> 1
65 set $type = $Lisp_Type_Int
66 else
67 set $type = $obj & dbg_typemask
68 if $type == Lisp_Type_Char
69 set $val = ($obj & dbg_valmask) >> dbg_gctypebits
70 else
71 ## It's a record pointer
72 set $val = $obj
73 end
74 end
75
76 if $type == Lisp_Type_Record
77 set $lheader = ((struct lrecord_header *) $val)
78 set $lrecord_type = ($lheader->type)
79 set $imp = ((struct lrecord_implementation *) lrecord_implementations_table[(int) $lrecord_type])
80 else
81 set $lrecord_type = -1
82 set $lheader = -1
83 set $imp = -1
84 end
85 end
86
87 document decode_object
88 Usage: decode_object lisp_object
89 Extract implementation information from a Lisp Object.
90 Defines variables $val, $type and $imp.
91 end
92
93 define xint
94 decode_object $arg0
95 print ((long) $val)
96 end
97
98 define xtype
99 decode_object $arg0
100 if $type == $Lisp_Type_Int
101 echo int\n
102 else
103 if $type == Lisp_Type_Char
104 echo char\n
105 else
106 printf "record type: %s\n", $imp->name
107 end
108 end
109 end
110
111 document xtype
112 Usage: xtype lisp_object
113 Print the Lisp type of a lisp object.
114 end
115
116 define lisp-shadows
117 run -batch -vanilla -f list-load-path-shadows
118 end
119
120 document lisp-shadows
121 Usage: lisp-shadows
122 Run xemacs to check for lisp shadows
123 end
124
125 define environment-to-run-temacs
126 unset env EMACSLOADPATH
127 set env EMACSBOOTSTRAPLOADPATH=../lisp/:..
128 set env EMACSBOOTSTRAPMODULEPATH=../modules/:..
129 end
130
131 define run-temacs
132 environment-to-run-temacs
133 run -nd -batch -l ../lisp/loadup.el run-temacs -q
134 end
135
136 document run-temacs
137 Usage: run-temacs
138 Run temacs interactively, like xemacs.
139 Use this with debugging tools (like purify) that cannot deal with dumping,
140 or when temacs builds successfully, but xemacs does not.
141 end
142
143 define check-xemacs
144 run -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated
145 end
146
147 document check-xemacs
148 Usage: check-xemacs
149 Run the test suite. Equivalent to 'make check'.
150 end
151
152 define check-temacs
153 environment-to-run-temacs
154 run -nd -batch -l ../lisp/loadup.el run-temacs -q -batch -l ../tests/automated/test-harness.el -f batch-test-emacs ../tests/automated
155 end
156
157 document check-temacs
158 Usage: check-temacs
159 Run the test suite on temacs. Equivalent to 'make check-temacs'.
160 Use this with debugging tools (like purify) that cannot deal with dumping,
161 or when temacs builds successfully, but xemacs does not.
162 end
163
164 define update-elc
165 environment-to-run-temacs
166 run -nd -batch -l ../lisp/update-elc.el
167 end
168
169 document update-elc
170 Usage: update-elc
171 Run the core lisp byte compilation part of the build procedure.
172 Use when debugging temacs, not xemacs!
173 Use this when temacs builds successfully, but xemacs does not.
174 end
175
176 define dmp
177 environment-to-run-temacs
178 run -nd -batch -l ../lisp/loadup.el dump
179 end
180
181 document dmp
182 Usage: dmp
183 Run the dumping part of the build procedure.
184 Use when debugging temacs, not xemacs!
185 Use this when temacs builds successfully, but xemacs does not.
186 end
187
188 define ldp
189 printf "%s", "Lisp => "
190 call debug_print($arg0)
191 end
192
193 document ldp
194 Usage: ldp lisp_object
195 Print a Lisp Object value using the Lisp printer.
196 Requires a running xemacs process.
197 end
198
199 define lbt
200 call debug_backtrace()
201 end
202
203 document lbt
204 Usage: lbt
205 Print the current Lisp stack trace.
206 Requires a running xemacs process.
207 end
208
209
210 define leval
211 ldp Feval(Fcar(Fread_from_string(build_string($arg0),Qnil,Qnil)))
212 end
213
214 document leval
215 Usage: leval "SEXP"
216 Eval a lisp expression.
217 Requires a running xemacs process.
218
219 Example:
220 (gdb) leval "(+ 1 2)"
221 Lisp ==> 3
222 end
223
224
225 define wtype
226 print $arg0->core.widget_class->core_class.class_name
227 end
228
229 define xtname
230 print XrmQuarkToString(((Object)($arg0))->object.xrm_name)
231 end
232
233 ## GDB's command language makes you want to ...
234
235 define pptype
236 set $type_ptr = ($arg0 *) $val
237 print $type_ptr
238 print *$type_ptr
239 end
240
241 define pstructtype
242 set $type_ptr = (struct $arg0 *) $val
243 print $type_ptr
244 print *$type_ptr
245 end
246
247 define pobj
248 decode_object $arg0
249 if $type == $Lisp_Type_Int
250 printf "Integer: %d\n", $val
251 else
252 if $type == Lisp_Type_Char
253 if $val > 32 && $val < 128
254 printf "Char: %c\n", $val
255 else
256 printf "Char: %d\n", $val
257 end
258 else
259 if $lrecord_type == lrecord_type_string
260 pptype Lisp_String
261 else
262 if $lrecord_type == lrecord_type_cons
263 pptype Lisp_Cons
264 else
265 if $lrecord_type == lrecord_type_symbol
266 pptype Lisp_Symbol
267 printf "Symbol name: %s\n", ((Lisp_String *)$type_ptr->name)->data_
268 else
269 if $lrecord_type == lrecord_type_vector
270 pptype Lisp_Vector
271 printf "Vector of length %d\n", $type_ptr->size
272 ##print *($type_ptr->data) @ $type_ptr->size
273 else
274 if $lrecord_type == lrecord_type_bit_vector
275 pptype Lisp_Bit_Vector
276 else
277 if $lrecord_type == lrecord_type_buffer
278 pstructtype buffer
279 else
280 if $lrecord_type == lrecord_type_char_table
281 pptype Lisp_Char_Table
282 else
283 if $lrecord_type == lrecord_type_char_table_entry
284 pptype Lisp_Char_Table_Entry
285 else
286 if $lrecord_type == lrecord_type_charset
287 pptype Lisp_Charset
288 else
289 if $lrecord_type == lrecord_type_coding_system
290 pptype Lisp_Coding_System
291 else
292 if $lrecord_type == lrecord_type_color_instance
293 pptype Lisp_Color_Instance
294 else
295 if $lrecord_type == lrecord_type_command_builder
296 pptype command_builder
297 else
298 if $lrecord_type == lrecord_type_compiled_function
299 pptype Lisp_Compiled_Function
300 else
301 if $lrecord_type == lrecord_type_console
302 pstructtype console
303 else
304 if $lrecord_type == lrecord_type_database
305 pptype Lisp_Database
306 else
307 if $lrecord_type == lrecord_type_device
308 pstructtype device
309 else
310 if $lrecord_type == lrecord_type_event
311 pptype Lisp_Event
312 else
313 if $lrecord_type == lrecord_type_extent
314 pstructtype extent
315 else
316 if $lrecord_type == lrecord_type_extent_auxiliary
317 pstructtype extent_auxiliary
318 else
319 if $lrecord_type == lrecord_type_extent_info
320 pstructtype extent_info
321 else
322 if $lrecord_type == lrecord_type_face
323 pptype Lisp_Face
324 else
325 if $lrecord_type == lrecord_type_float
326 pptype Lisp_Float
327 else
328 if $lrecord_type == lrecord_type_font_instance
329 pptype Lisp_Font_Instance
330 else
331 if $lrecord_type == lrecord_type_frame
332 pstructtype frame
333 else
334 if $lrecord_type == lrecord_type_glyph
335 pptype Lisp_Glyph
336 else
337 if $lrecord_type == lrecord_type_gui_item
338 pptype Lisp_Gui_Item
339 else
340 if $lrecord_type == lrecord_type_hash_table
341 pptype Lisp_Hash_Table
342 else
343 if $lrecord_type == lrecord_type_image_instance
344 pptype Lisp_Image_Instance
345 else
346 if $lrecord_type == lrecord_type_keymap
347 pptype Lisp_Keymap
348 else
349 if $lrecord_type == lrecord_type_lcrecord_list
350 pstructtype lcrecord_list
351 else
352 if $lrecord_type == lrecord_type_ldap
353 pptype Lisp_LDAP
354 else
355 if $lrecord_type == lrecord_type_lstream
356 pstructtype lstream
357 else
358 if $lrecord_type == lrecord_type_marker
359 pptype Lisp_Marker
360 else
361 if $lrecord_type == lrecord_type_opaque
362 pptype Lisp_Opaque
363 else
364 if $lrecord_type == lrecord_type_opaque_ptr
365 pptype Lisp_Opaque_Ptr
366 else
367 if $lrecord_type == lrecord_type_popup_data
368 pptype popup_data
369 else
370 if $lrecord_type == lrecord_type_process
371 pptype Lisp_Process
372 else
373 if $lrecord_type == lrecord_type_range_table
374 pptype Lisp_Range_Table
375 else
376 if $lrecord_type == lrecord_type_specifier
377 pptype Lisp_Specifier
378 else
379 if $lrecord_type == lrecord_type_subr
380 pptype Lisp_Subr
381 else
382 if $lrecord_type == lrecord_type_symbol_value_buffer_local
383 pstructtype symbol_value_buffer_local
384 else
385 if $lrecord_type == lrecord_type_symbol_value_forward
386 pstructtype symbol_value_forward
387 else
388 if $lrecord_type == lrecord_type_symbol_value_lisp_magic
389 pstructtype symbol_value_lisp_magic
390 else
391 if $lrecord_type == lrecord_type_symbol_value_varalias
392 pstructtype symbol_value_varalias
393 else
394 if $lrecord_type == lrecord_type_timeout
395 pptype Lisp_Timeout
396 else
397 if $lrecord_type == lrecord_type_toolbar_button
398 pstructtype toolbar_button
399 else
400 if $lrecord_type == lrecord_type_tooltalk_message
401 pptype Lisp_Tooltalk_Message
402 else
403 if $lrecord_type == lrecord_type_tooltalk_pattern
404 pptype Lisp_Tooltalk_Pattern
405 else
406 if $lrecord_type == lrecord_type_weak_list
407 pstructtype weak_list
408 else
409 if $lrecord_type == lrecord_type_window
410 pstructtype window
411 else
412 if $lrecord_type == lrecord_type_window_configuration
413 pstructtype window_config
414 else
415 if $lrecord_type == lrecord_type_fc_pattern
416 pstructtype fc_pattern
417 else
418 if $lrecord_type == lrecord_type_fc_objectset
419 pstructtype fc_objectset
420 else
421 if $lrecord_type == lrecord_type_fc_fontset
422 pstructtype fc_fontset
423 else
424 echo Unknown Lisp Object type\n
425 print $arg0
426 ## Barf, gag, retch
427 end
428 end
429 end
430 end
431 end
432 end
433 end
434 end
435 end
436 end
437 end
438 end
439 end
440 end
441 end
442 end
443 end
444 end
445 end
446 end
447 ## Repeat after me... gdb sux, gdb sux, gdb sux...
448 end
449 end
450 end
451 end
452 end
453 end
454 end
455 end
456 end
457 end
458 end
459 end
460 end
461 end
462 end
463 end
464 end
465 end
466 ## Are we having fun yet??
467 end
468 end
469 end
470 end
471 end
472 end
473 end
474 end
475 end
476 end
477 end
478 end
479 end
480 end
481 end
482 end
483 end
484 end
485 end
486
487 document pobj
488 Usage: pobj lisp_object
489 Print the internal C representation of a Lisp Object.
490 end
491
492 ## -------------------------------------------------------------
493 ## functions to test the debugging support itself.
494 ## If you change this file, make sure the following still work...
495 ## -------------------------------------------------------------
496 define test_xtype
497 printf "Vemacs_major_version: "
498 xtype Vemacs_major_version
499 printf "Vhelp_char: "
500 xtype Vhelp_char
501 printf "Qnil: "
502 xtype Qnil
503 printf "Qunbound: "
504 xtype Qunbound
505 printf "Vobarray: "
506 xtype Vobarray
507 printf "Vall_weak_lists: "
508 xtype Vall_weak_lists
509 printf "Vxemacs_codename: "
510 xtype Vxemacs_codename
511 end
512
513 define test_pobj
514 printf "Vemacs_major_version: "
515 pobj Vemacs_major_version
516 printf "Vhelp_char: "
517 pobj Vhelp_char
518 printf "Qnil: "
519 pobj Qnil
520 printf "Qunbound: "
521 pobj Qunbound
522 printf "Vobarray: "
523 pobj Vobarray
524 printf "Vall_weak_lists: "
525 pobj Vall_weak_lists
526 printf "Vxemacs_codename: "
527 pobj Vxemacs_codename
528 end
529