Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <vladimir@codesourcery.com>
To: gdb@sources.redhat.com
Subject: Re: MI non-stop mode spec
Date: Wed, 19 Mar 2008 09:14:00 -0000	[thread overview]
Message-ID: <frqbl3$rpe$1@ger.gmane.org> (raw)
In-Reply-To: <18400.32557.752481.709565@kahikatea.snap.net.nz>

Nick Roberts wrote:

>  > (*) Current MI syntax says that any result record must be followed by a
>  > prompt. For sync targets, this is wrong -- when gdb prints ^running
>  > and resumes the target, it does not check for input, so (gdb) is misleading.
>  > When the target stops, the *stopped message, followed by the prompt is
>  > printed -- and it's at this point that gdb starts to accept the input
>  > again. So, I propose to remove the prompt right after ^running for the
>  > sync targets.
> 
> It's not a prompt, just a delimiter.  For a start it has a newline after it.
> Furthermore if you change the prompt with "set prompt", it doesn't change.

Let's call (gdb) a "MI prompt", then. Given that each MI output is already
terminated with a newline, (gdb) is not necessary to property parse MI
output. Then, the question is that does (gdb) mean? If it does not mean 
anything, it should be, ideally, just removed. And if it means anything,
then what? Current behaviour is not consistent, but the code suggests
that it's meant to indicate when GDB is ready for a new command. I think
such a behaviour will be useful for a frontend.


>  > Each MI command results in either ^done, ^error, ^connected or ^running
>  > response. The ^connected response is basically identical to ^done,
>  > and the naming is different for historic reasons.  All of those
>  > except for ^running are immediately followed by prompt. The ^running
>  > response means that the target has started running. Further events
>  > from the target will be reported using async notifications.
>  > 
>  > The async notifications are for various interesting events that cannot
>  > generally be reported as result of a command. For example,
>  >           
>  >           =thread-created
> 
> This notification doesn't appear to be in the manual.  

Because I'm still working for a doc patch for same.

> Why are there no 
> equivalent =thread-exited notifications?

Because it's not implemented. Note that current thread.c implementation
will only declare a thread as done when we do -thread-info (or anything
else that calls prune_threads, so the value of =thread-exited will be limited,
without some associated work on threads layer).

>  >...
>  > Presently, MI spec says a command can output ^running just once.
>  > However, it the presense of breakpoint commands, it's quite possible
>  > that we resume one thread, hit a breakpoint, and breakpoint commands
>  > resume all threads, or some other thread.
>  > 
>  > To handle this case we need a new async output for this case:
>  > 
>  >    *running,thread-id="xxx"
> 
>       ^running,thread-id="xxx" ?  ("running" isn't an out-of-bound record)

"*running" is the new async output proposed by this spec (and async-output is
a kind of out-of-bound record). We cannot use ^running, because ^running is 
emitted once for each command, and each command can resume the target several 
times, and possibly - different threads.

>  > which is emitted whenever a previously stopped thread is resumed.
>  > In case all threads are resumed, "xxx" will be "all".
>  > To simplify things, if GDB is started in MI mode, no CLI command is allowed
>  > while the target is running, and -interpreter-exec is not allowed either.
> 
> If you can make this work with MI commands, it should be easy to add CLI
> commands to do the same thing.  I will do this.

Ok. I have not fundamental objections to add CLI commands, however each
CLI command added must be individually examined and its behaviour in non-stop/async
case should be clarified -- which is what I'm trying to do for MI.

>  >...
>  >     - Thread commands. The -thread-info command should be implemented (a
>  >     patch is already posted).
> 
> Notice that there is currently an inconsistency here:
> 
>   -exec-run
>   ^running
>   (gdb)
>   *stopped,reason="breakpoint-hit",bkptno="1",thread-id="0",...
>                                               ^^^^^^^^^^^^
> while
> 
>   (gdb)
>   -thread-info
>   ^done,threads=[]
>   (gdb)
>   -thread-info 0
>   ^done,threads=[]
>   (gdb)
>   b main thread 0
>   &"b main thread 0\n"
>   &"Unknown thread 0.\n"
>   ^error,msg="Unknown thread 0."
>   (gdb)

It's everywhere. The problem is that current GDB does not agree with
the obvious fact that a single-threaded program has a single thread.
Instead, it believes such a program has zero threads. Above is just
one example of the inconsistency. Dan has just posted an in-progress 
patch that causes ptid not to change (gaining non-zero tid member) 
when program goes from ST to MT, and I have a patch to early add ptid
of the main thread to the thread table, so hopefully we'll have 
this sorted.

- Volodya

 



  reply	other threads:[~2008-03-19  6:26 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-19  2:49 Vladimir Prus
2008-03-19  6:26 ` Nick Roberts
2008-03-19  9:14   ` Vladimir Prus [this message]
2008-03-19 10:02     ` Nick Roberts
2008-03-19 11:10       ` Vladimir Prus
2008-03-19 12:30         ` Nick Roberts
2008-03-19 13:43           ` Vladimir Prus
2008-03-19 20:44       ` Michael Snyder
2008-03-19 11:20     ` Bob Rossi
2008-03-19 11:16 ` Bob Rossi
2008-03-19 12:01   ` Vladimir Prus
2008-03-19 13:50     ` Bob Rossi
2008-03-19 14:07       ` Vladimir Prus
2008-03-19 14:33         ` Bob Rossi
2008-03-19 16:09           ` Vladimir Prus
2008-03-20 18:22 ` Marc Khouzam
2008-03-20 20:02   ` Vladimir Prus
2008-03-21  9:11   ` Nick Roberts
2008-03-21  9:48     ` Vladimir Prus
2008-03-21 18:13       ` Nick Roberts
2008-03-22  0:33         ` Vladimir Prus
2008-03-23  4:41           ` Nick Roberts
2008-03-23  5:18             ` Vladimir Prus
2008-03-23  9:25               ` Nick Roberts
2008-03-24  5:44                 ` Vladimir Prus
2008-03-24  7:05                   ` Thread bound variable objects [was: Re: MI non-stop mode spec] Nick Roberts
2008-03-24  7:18                     ` Vladimir Prus
2008-03-24 11:04                       ` Nick Roberts
2008-03-24 14:38                         ` Vladimir Prus
2008-03-25  6:28                       ` Thread bound variable objects Nick Roberts
2008-03-25 11:34                         ` Daniel Jacobowitz
2008-03-21 11:52 ` MI non-stop mode spec Vladimir Prus
2008-03-24 23:14   ` Daniel Jacobowitz
2008-03-25 17:46     ` Vladimir Prus
2008-03-22 17:33 ` Pawel Piech
2008-03-24  4:03   ` Nick Roberts
2008-03-24 17:22     ` Pawel Piech
2008-03-24 20:23       ` Vladimir Prus
2008-03-25  2:14       ` Nick Roberts
2008-03-24 18:38   ` Vladimir Prus
2008-03-24 21:25     ` Pawel Piech
2008-03-24 21:46       ` Vladimir Prus
2008-03-24 22:28         ` Pawel Piech
2008-03-25 12:30           ` Vladimir Prus
2008-03-25 18:30             ` Pawel Piech
2008-03-27 14:13               ` Vladimir Prus
2008-03-27 19:39                 ` Pawel Piech
2008-03-25 21:28             ` Nick Roberts
2008-03-26 13:03               ` Pawel Piech
2008-03-25  1:00   ` Daniel Jacobowitz
2008-03-25 18:18     ` Pawel Piech
2008-03-30 21:36       ` Pawel Piech

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='frqbl3$rpe$1@ger.gmane.org' \
    --to=vladimir@codesourcery.com \
    --cc=gdb@sources.redhat.com \
    /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