mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
PDB 0.3
http://www.cl.cam.ac.uk/netos/pdb
Alex Ho
June 2005
This is the latest incarnation of the pervasive debugger.
PDB is a remote stub for GDB. Running as a user-space
application in domain 0, it can debug any other domain.
+------+ tcp/ip +-------+
| GDB |--------------| PDB |
+------+ +-------+ +-------+
| Dom 0 | | Dom U |
+-------+---+-------+
| Xen |
+-------------------+
Installation
- Install OCaml 3.08 in domain 0.
http://caml.inria.fr/download.en.html is a good place to start.
- Build Xen with debugger support
make domu_debug=y xen
- (optional)
Build the target domains with debugging symbols.
make CONFIG_DEBUG_INFO=true CONFIG_FRAME_POINTER=false linux-2.6-xenU-build
You can also change linux-2.6.11-xenU/Makefile
CONFIG_CC_OPTIMIZE_FOR_SIZE from -O2 to -O
- Build PDB
(cd tools/debugger/libxendebug; make install)
(cd tools/debugger/pdb; make)
Usage
- PDB does not currently support SMP. Please boot xen with "maxcpus=1"
- Run PDB
domain-0.xeno# ./pdb <port>
- Run GDB
hostname% gdb <xeno.bk>/dist/install/boot/vmlinux-syms-2.6.11.11-xenU
(gdb) target remote domain-0.xeno:<port>
At this point, you'll get an error message such as:
Remote debugging using domain-0.xeno:5000
0x00000000 in ?? ()
warning: shared library handler failed to enable breakpoint
Although GDB is connected to PDB, PDB doesn't know which domain
you'd like to debug, so it's just feeding GDB a bunch of zeros.
(gdb) maint packet x context = domain <domid> <vcpu>
This tells PDB that we'd like to debug a particular domain & vcpu.
However, since we're sending the command directly to PDB, GDB doesn't
know that we now have a proper target. We can force GDB to invalidate
its register cache. This is optional; the next time the program
stops GDB will query for the registers automatically.
(gdb) flushreg
the following gdb commands should work :)
break
step, stepi
next, nexti
continue
print
To Do
- watchpoints
- support for SMP
- support for user applications