Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker <brobecker@adacore.com>
To: gdb@sourceware.org, Nick Roberts <nickrob@snap.net.nz>
Subject: Re: Non-stop debugging and automatically stopping the target
Date: Thu, 10 Apr 2008 18:00:00 -0000	[thread overview]
Message-ID: <20080410174124.GA7163@adacore.com> (raw)
In-Reply-To: <20080410141711.GA22694@caradoc.them.org>

> The general issue is this: should GDB implicitly stop the target?

I think some commands are more "special" than others, and indeed
backtrace is one of those.

> Then of course there are race conditions.  Even if we can read memory
> non-intrusively, we probably can't get a consistent snapshot of memory
> for long enough to generate a backtrace; the current function will
> return in the middle of the unwinding process.  So for backtrace, the
> target is going to have to stop.

Yes, I don't see a way out of stopping the inferior if we want to be
able to reliably compute the backtrace. But even for plain memory reads
(such as "x/x ADDR" or just plain "print VAR"), there are also possible
race conditions.

The subject of this thread says "non-stop" mode, so does it mean that
in "all-stop" mode we're assuming that the target program is not time-
sensitive, and so we'll always pause it? In which case, I assume users
of the "non-stop" mode are in fact worried about time spent in suspended
mode. I think it's important to understand who are going to be the typical
users of the non-stop mode.

Assuming I am correct about the distinction, we could decide that
all these commands (backtrace, x, etc) do in fact implicitly interrupt
the inferior when in all-stop mode.

If the typical user of the non-stop mode is in fact worried about
not affecting the timing of his application, I allow most commands
that we expect to be processed quickly (print VAR, x/x, etc) to be
performed while running if the target allows it - knowing that the
output could be corrupted if the target was writing the data we're
reading at the same time. For the backtrace, I'm unsure. We could
try experimenting with NOT stopping the target and see if we can
make it produce something correct at least a decent proportion of
the time.

I don't see any problem with disallowing the backtrace command in
non-stop mode, or making it implicitly stop the target (in that
case, I would suggest the use of an option to protect its use).

Requiring that the user suspend the target himself in order to being
able to get a backtrace is not that attractive, IMO. In that case,
the user would have to perform a sequence of 3 steps (suspend;
backtrace; resume) instead of just one command, which would probably
take more time than if the backtrace command did the suspend/resume
itself.

-- 
Joel


  reply	other threads:[~2008-04-10 17:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-10 17:59 Daniel Jacobowitz
2008-04-10 18:00 ` Joel Brobecker [this message]
2008-04-10 18:10   ` Daniel Jacobowitz
2008-04-10 18:24     ` Joel Brobecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080410174124.GA7163@adacore.com \
    --to=brobecker@adacore.com \
    --cc=gdb@sourceware.org \
    --cc=nickrob@snap.net.nz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox