On Tue, Nov 06, 2007 at 03:58:55AM +0900, Stephen J. Turnbull wrote:
FKtPp writes:
> > If you have the core file, start gdb /path/to/xemacs, then source
> > .gdbinit,
>
> It seemed that, I don't have `pobj' nor `ldp' command defined. Is that
a gdb
> standard command or you defined for self needs? How to define it?
> What does it do?
"source .gdbinit" is the key. It lives in the XEmacs sources src/
subdirectory next to the xemacs binary.
pobj and ldp are two commands that take a C pointer to a Lisp_Object
and print it out in various ways. pobj shows the relationship of the
C struct to the Lisp object more clearly, while ldp actually uses the
Lisp engine's printer to show you what you would see if you typed M-:
obj RET in XEmacs. These user commands are defined in .gdbinit.
If you start gdb from the same directory where .gdbinit is, gdb will
read it automatically. (Thus "cd /path/to/xemacsstuff; gdb xemacs"
has some advantages over "gdb /path/to/xemacsstuff/xemacs".)
Thanks for your time and patient, I've know how to do it now. And this is
the result:
--8<---------------cut here---------------start------------->8---
Fatal error: assertion failed, file print.c, line 1522, ABORT()
Program received signal SIGABRT, Aborted.
[Switching to Thread 0x2b8774f6a1e0 (LWP 13108)]
0x00002b8773f636a5 in raise () from /lib/libc.so.6
(gdb) up 9
#9 0x0000000000470d81 in execute_optimized_program (
program=0x131ee60 "~\033~\032\r~\034~\021~\211\020\026\035~\026\036\016\037~\004~
\210~ \210\r\026
~~!\210~~\f~a~\037~\rA@!~\025~\rA@GU~\r~\rA@~H!~\004~\035~\032\f~a~\004~\022\f~s~\004~\n\f~a~\004~\002~\"\210~\r~\"\210~
~\v~~\016!\"\210~~!\210+~\207!", stack_depth=6, constants_data=0xb133d0)
at bytecode.c:862
(gdb) pobj constants_data
Unknown Lisp Object type
$1 = (Lisp_Object *) 0xb133d0
(gdb) down 1
#8 0x00000000004b5d16 in Ffuncall (nargs=3, args=0x7fff38e20d18)
at eval.c:3928
(gdb) pobj args[0]
$2 = (struct Lisp_Symbol *) 0x9b1af0
$3 = {lheader = {type = 4, mark = 0, c_readonly = 0, lisp_readonly = 0,
uid = 3897}, next = 0x0, name = 12653648, value = 9672544,
function = 10266152, plist = 10223248}
Symbol name: display-error
(gdb) pobj args[1]
$4 = (struct Lisp_Cons *) 0x11baa78
$5 = {lheader = {type = 6, mark = 0, c_readonly = 0, lisp_readonly = 0,
uid = 390533}, car_ = 10034704, cdr_ = 18593336}
(gdb) pobj args[2]
$6 = (struct Lisp_Symbol *) 0x9bf8c0
$7 = {lheader = {type = 4, mark = 0, c_readonly = 0, lisp_readonly = 0,
uid = 264}, next = 0x0, name = 12705424, value = 10221760,
function = 9672544, plist = 10223248}
Symbol name: t
(gdb) ldp args[0]
Lisp => display-error
(gdb) ldp args[1]
(invalid-function #<EMACS BUG: freed lrecord object 0x111dd60 Save your buffers
immediately and please report this bug>)
(gdb) ldp args[2]
Lisp => t
(gdb)
--8<---------------cut here---------------start------------->8---
> I've done that, so what next? I can tempraryly using gedit as my editor.
Just start another instance of XEmacs. In fact, if you're into heavy
debug and fix mode, it often makes sense to have a cycle like "make;
cd src; ./xemacs" then in XEmacs use M-x gdb to start gdb-mode which
gives you a somewhat useful toolbar and multiple windows on debugger
data. (Of course you have to be careful to avoid tickling the crash
you're debuging in the parent xemacs! Or you could use a stable
version that doesn't crash.)
Yes, I like this :p But I still have to use some other editor because
of the multi-gnuserv confusing.
--
ENCODING
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-beta