This is the mail archive of the
mailing list for the GDB project.
Re: Cross debugger
On Thursday 16 June 2011 14:52:24, Paul Koning wrote:
> On Jun 16, 2011, at 7:53 AM, Chris Sutcliffe wrote:
> > On 15 June 2011 22:53, Joel Brobecker wrote:
> >> What I don't understand is why you created a cross compiler/debugger,
> >> while it seems to me you could have just created a native x64 MinGW
> >> toolset. That's what we do at AdaCore: We use cygwin as the build
> >> environment, but then build a MinGW toolset by configuring with
> >> --build=x86_64-pc-mingw32. As far as I know, the gdbserver will
> >> be automatically built.
> > Good point, for some reason I was thinking that since gdb would be
> > running withing the Cygwin environment I would need the
> > '--host=i686-pc-cygwin'. If I build a native x64 MinGW gdb will it
> > understand Cygwin paths correctly?
> >>> (gdb) start
> >> [...]
> >>> Don't know how to run. Try "help target".
> >> And that's also expected, since you have a cross-debugger. So the
> >> debugger is expecting you to connect to the target where the process
> >> is running.
> > Ah, I didn't realize a cross-debugger could only be used to connect to
> > running process.
> More precisely, it can attach to an already running process, or you can start a new one on the command line. Either way, though, by the time gdb connects to gdbserver, the process already exists. If you started it on the command line, it's on the first instruction (typically some sort of startup library code, well before "main"). So either way, you get things going by "continue".
That's a bit orthogonal to cross-debuggers. It's "target remote"
that doesn't know how to "start". "target extended-remote" does know.
When you're not already connected to a remote target, "run"/"start"
will try to run the program with the native debugger. If there's
no native debugger in your gdb build (because you've built gdb as
a cross debugger only), then you'll see that message, because
your gdb doesn't know how to run the program natively.
Those commands _can_ be used with a cross-debugger. You need to
connect to a remote target that knows how. That is what the
--multi switch of gdbserver is for. Start gdbserver with e.g.,
"gdbserver --multi :9999"
and connect to it from gdb with "target extended-remote".
You can then use "run", "start", and "attach", just like you
would if you were debugging with a native debugger.