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
next prev 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