qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Add native debugger


From: Rick Hodgin
Subject: Re: [Qemu-devel] Add native debugger
Date: Sun, 27 Nov 2011 06:12:34 -0800 (PST)

Blue,



--- On Sun, 11/27/11, Blue Swirl <address@hidden> wrote:
> On Sun, Nov 27, 2011 at 04:10, Rick
> Hodgin <address@hidden>
> wrote:
> > For i386, I'm considering writing a native debugger
> for QEMU that is not GDB. It would allow a separate/new
> windowed interface which would show disassembly, registers,
> stack, local variables, memory windows, etc., allowing the
> user to single-step through code and trap opcodes like INT
> 1, INT 3, INT 4, etc.  It would be invoked with something
> like "qemu -debugger" from the command line, and would have
> a UI similar to Microsoft's Debugger in Visual Studio when
> no PDB is available, but would show a similar type of
> disassembly form.
> 
> QEMU and the debugger should be kept separate. You should
> use the GDB interface to implement the debugger, that way
> you can also test it against known good configuration. For
> example, try to find out how GDB performs single stepping
> (set remote debug 1).

I appreciate this advice. I'm looking for a native implementation within QEMU 
that is always available, always on, always active (when enabled). In this way, 
whenever INT 3 opcodes are found, the debugger can intercept and leap into 
existence, and without all of the gdb protocol overhead and parsing.

> > I was looking at the QEMU code and I can't find an
> > obvious place where it seems to iterate through each CPU
> > instruction, which is where I had in mind to add a hook.
> >
> > Can someone get me pointed in the right direction?
> > Where will I look for something like this:
> >
> > for (;;)
> > {
> >  execute_next_instruction();
> > }
> 
> QEMU does not work like that at all, it uses TCG, KVM or
> Xen to execute the code and none of those use that kind
> of single instruction loop either.

There must be some place where it fetches opcodes for what's coming up next to 
execute.  For my implementation I'm using a single i386 core, and that's all 
I'm concerned about for now.  I'd like to intercept that part of the loop where 
cs:e/ip is used to retrieve the next opcode, so that I can check every 
instruction to see if the native debugger window has received GUI stuff asking 
for a pause, if there are breakpoints, etc.

I'd like help on how to do this, and not advice on using gdb instead.  There 
are some particular reasons I want to use my own native debugger in this way.  
I just need pointed in the right direction to get started.  That's for 
assistance toward this end. :-)

Thanks and best regards,
Rick C. Hodgin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]