Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Pawel Piech <pawel.piech@windriver.com>
To: Vladimir Prus <vladimir@codesourcery.com>
Cc: gdb@sources.redhat.com
Subject: Re: MI non-stop mode spec
Date: Sat, 22 Mar 2008 17:33:00 -0000	[thread overview]
Message-ID: <47E3FA92.40409@windriver.com> (raw)
In-Reply-To: <200803190016.02072.vladimir@codesourcery.com>

Hi Vladimir,
Thank you for putting together this proposal for extending the MI 
protocol to allow non-stop debugging.  In general I think the changes 
you are proposing are positive I just have two criticisms when looking 
at this proposal from the client's point of view.  BTW, I work with Marc 
on the Eclipse DSF-GDB integration.  One disclaimer I should make is 
that I'm not familiar with any of the GDB internals so I don't know what 
is easier/more difficult.  I'm only speaking from a client's point of view.

1) Changing the protocol to be (partially) stateless by adding -thread 
and -global options to multitude of commands is not backwards compatible. 

 From the clients point of view, keeping the protocol backward 
compatible is a great benefit.  I'm not a big fan of -thread-select, but 
it's there and trying to remove it now I think will cause more problems 
than it solves. 

You mentioned that when switching to non-stop mode there is an inherent 
race condition in using -thread-select because GDB may switch current 
threads due to an async stopped event.  A less jarring change to the 
protocol than adding -thread/-global to all the commands would be to 
change the behavior of *stopped not to switch the current thread.  To 
remain backward compatible with older GDB versions, i.e. to work with 
old *stopped event behavior, MI clients can make the assumption that 
after a stopped event the current thread is not known and send a 
-thread-select before sending new commands.  One objection to this 
change may be that it's not forward compatible and older clients will 
not work with the new MI protocol version, but I think older clients 
will not work with GDB in non-stop mode anyhow with the protocol changes 
that you propose, so that point should make no difference in your decision.

I don't fully understand why disabling CLI commands is desired, but I'm 
guessing it's because the CLI commands would still rely on the current 
thread.  If so, then keeping the MI protocol stateful would hopefully 
address that concern and not force you to disable the CLI interface, 
which would be unfortunate.

2) The proposal does not address multi-process debugging in any way.  I 
understand that multi-process (or multi-core) debugging is not part of 
this proposal, but I think keeping that use case in mind when making 
this change would make it less painful for the clients when we actually 
get to that point.  In context of multi-process debugging, options such 
as -global and fields such as "all" are rather ambigeous.  Instead, I 
have the following suggestion:

Assign an ID to a process in the same name space as threads.  Until 
multi-process debugging is implemented you could just reserve a thread 
id, such as "0" to be the process thread ID.  For completeness this ID 
would be returned already in the thread-id field of the response to 
-target-select command  In order to operate on a whole process context 
use a -thread-select command with the process context id (followed by 
the command).  -thread-list-ids would list threads within that process, 
normally starting with "1".  In reporting stopped events, (in non-stop 
debugging mode) if a thread has suspended, use the thread-id field to 
indicate which thread has triggered the stop.  Use a separate field: 
container-id, to indicate whether the whole process stopped, assuming 
that some events still cause all threads to stop.  In all-stop mode, the 
container-id field would always be present in the stopped event.  I 
think that making this change would allow clients to still work with 
older versions of GDB in all-stop mode, since thread 0 in all-stop mode 
would act like a container thread anyway, resuming and suspending all 
threads.


The Wind River debugger which implements the MI protocol, supprots 
multi-core/multi-process debugging, non-stop and all-stop debugging 
modes simultaneously (for different targets), uses the above protocol 
extensions for several years now rather successfully.  So I hope you 
consider these suggestions seriously even if they are not easiest to 
implement given the GDB architecture.

Cheers,
Pawel


  parent reply	other threads:[~2008-03-21 18:13 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
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 [this message]
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=47E3FA92.40409@windriver.com \
    --to=pawel.piech@windriver.com \
    --cc=gdb@sources.redhat.com \
    --cc=vladimir@codesourcery.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