" How to debug xen? just use the nsplitd as XenDebugger-HOWTO said? It seems
" quite tricky. I believe lots of people are doing development on xen, so
" usually how to debug it?
This is how I debug xen. The starting point is reading
I do not use nsplitd.
First, build debug kernels.
For xen, in the xeno-unstable.bk/xen directory add this to arch/x86/Rules.mk
CFLAGS += -g
and build xen saying
For xenolinux, in xeno-unstable.bk/linux-2.4.26-xen0
turn on CONFIG_FRAME_POINTER (in the Kernel Hacking section of
menuconfig or xconfig)
in Makefile put -g into CFLAGS_KERNEL (line 52)
CFLAGS_KERNEL = -g
and build xenolinux with
make ARCH=xen bzImage
Second, find a target machine with some serial lines.
I prefer virtual machines and use VMware Workstation 4.5 on Linux (4.0 didn't
work, btw). In the vmware Machine Settings, config both com1 and com2
to be named pipes with "This end is the client" and "The other end is a
virtual machine". Run two socat jobs in the background
to convert the pipes to ptys:
socat UNIX-LISTEN:/tmp/com1pipe,unlink-early,fork pty,link=/tmp/com1 &
socat UNIX-LISTEN:/tmp/com2pipe,unlink-early,fork pty,link=/tmp/com2 &
Third, boot the target machine and connect the debugger.
Put the debug xen and xenolinux on the machine. In the grub menu.lst
file, add the serial lines and pdb to the xen command line:
kernel /boot/xen.gz.debug dom0_mem=100000 ifname=eth0 com1=9600,8n1
Boot it up and connect to the console. In my vmware setup, I connect
to com1 from the machine hosting VMware with
kermit -c -l /tmp/com1
Then on com1 type ^A^A^A to make xen listen to console cmds.
At this point type 'h' and see if the 'D' command is listed. If not,
pdb is missing so make sure the xen being run was built with debugger=y.
Hit 'D' on the console to make xen drop into the debugger.
>From the machine listening to the serial lines, connect to the target machine
with gdb and the xen-syms file and check if was built with -g by trying to
list a function:
$ gdb xeno-unstable.bk/xen/xen-syms
(gdb) list do_dom0_op
26 extern unsigned int alloc_new_dom_mem(struct domain *,
27 extern long arch_do_dom0_op(dom0_op_t *op, dom0_op_t
28 extern void arch_getdomaininfo_ctxt(struct domain *,
30 long do_dom0_op(dom0_op_t *u_dom0_op)
32 long ret = 0;
33 dom0_op_t curop, *op = &curop;
35 if ( !IS_PRIV(current) )
(gdb) target remote /tmp/com2
Now you can debug xen itself. Note that the breakpoint is in xenolinux
so gdb will be cryptic about the current function and stacktrace. Put a
breakpoint in xen somewhere and continue to get gdb to a function is can
To debug xenolinux, drop to the debugger:
(gdb) set pdb_ctx.domain=0
(gdb) set pdb_ctx.valid=1
(gdb) add-symbol-file xeno-unstable.bk/linux-2.4.26-xen0/vmlinux
Now you can debug vmlinux itself (except where the xen and linux
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
Xen-devel mailing list