This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: Virtual Machine and GDB
Hi,
On 8/21/06, Michael Snyder <Michael.Snyder@palmsource.com> wrote:
On Mon, 2006-08-21 at 18:59 +0100, Cai Qian wrote:
> Hi,
>
> On 8/21/06, Neo <cjia@cse.unl.edu> wrote:
> > Cai,
> >
> > I am wondering why you need to debug the VM remotely. Maybe you have
> > your own requirements, such as for embedded systems. But I think you
> > need to first make sure you can debug any binary running on your target
> > board remotely. Then, you can treat the VM as the rest ordinary binary.
> >
>
> I don't want to debug VM itself here, but executable running on the
> VM. As my VM has a new instruction set, and GDB is quite unlikely to
> run locally.
OK, so you have two issues:
1) You need to get gdbserver running in your VM, and provide
some means for gdbserver to talk to a gdb that is running in the
outside world. Unles you have access to a serial port, the
obvious way to do this is to get a IP stack running in the VM,
assign it an IP address, and let gdbserver open up a socket.
Then gdb (running somewhere outside of the VM) can attach to
the socket.
I have implemented a debug server in VM. At the moment, it can read
the RSP messages from remote GDB through socket. So, I think I have
done this part.
2) You need to teach gdb to understand the architecture of
your virtual machine -- the word size, the instruction language,
the register set, and so forth. That doesn't mean porting gdb
to RUN on the VM -- it just means teaching gdb how to DEBUG
the VM (meaning, debug something that is running in the VM).
How can I achieve this part? At the moment, after received a packet
from remote GDB, I am trying to parse the packet first, and then send
the right response to GDB. For example, if VM received a "info
registers" command at the debug socket, it will try to collect
register information, and then generate a right RSP message back. Or,
if it received "next", I can set a flag in VM to indicate to only
execute one instruction. Is that a right way to do?
Qian