From: Vladimir Prus <ghost@cs.msu.su>
To: gdb@sources.redhat.com
Subject: Re: The 'x' command: size problem
Date: Wed, 07 Sep 2005 13:42:00 -0000 [thread overview]
Message-ID: <200509071742.11727.ghost@cs.msu.su> (raw)
In-Reply-To: <20050907131319.GA2963@nevyn.them.org>
On Wednesday 07 September 2005 17:13, Daniel Jacobowitz wrote:
> On Wed, Sep 07, 2005 at 10:53:34AM +0400, Vladimir Prus wrote:
> > By "asynchronous" I mean that after sending a command to gdb, I can't
> > just immediately get the result. I need to return to Qt message loop and
> > wait why gdb reply is sent to my object. So, instead of:
> >
> > unsigned size = gdb_eval("sizeof(g)");
> >
> > I need to add another method to my class that will be called when result
> > of "sizeof" arrives, and this complicates the implementation quite a bit.
>
> This is a problem people have solved a thousand times...
Yes, and I've solved it too today, so that gives 1001 times. But the solution
is not pretty, and if 'x' allowed expression in both parameters I would not
need it. The same issue is in MI:
-data-read-memory &i b 1 1 sizeof(i)
does not work, while
-data-read-memory &i x 1 1 4
works fine. Is it's hard to evaluate 'num-column' argument as expression?
And BTW, docs don't even mention this restriction in MI.
> > > And it'll give you a whole new host of issues keeping up with the
> > > changing interface.
> >
> > But at least (assuming the interface is a nice C++ one), something like:
> >
> > get_memory(std::vector<char>& c)
> >
> > is crystal clear, while documentation of MI's -data-read-memory output
> > format is very unclear. It does not document what's "table", or "next
> > page" is and does not link to any definitions of those terms.
>
> Please, then, feel free to improve the documentation.
Oh.. if only it were in Docbook :-(
Besides, how can I improve documentation if I don't know definitions of those
terms, to begin with?
> Really, a C++
> interface would be just as complicated. Even in your example. Where
> would you get the memory from? How much would you get?
Ok, the real interface would be:
void get_memory(unsigned address, unsigned amount_in_bytes,
vector<char>& result)
> What would it do on errors?
Well, though a type defined from gdb_exception. I think think the above
prototype is clearer, and much shorter that documentation for
-data-read-memory, that does not even documents everything.
> > > I don't see how it would eliminate the need for asynchronous
> > > interfaces, either.
> >
> > I'd be talking with gdb in a separate thread. At least in Qt4, it will be
> > possible to send requests from GUI thread to debugger controller thread,
> > fully transparently. For Qt3, I'd implement such
> > across-threads-command-queue myself.
>
> Then you're going to need to asynchronously wait for the gdb thread to
> return data to your GUI thread. If you're willing to block waiting for
> that, then block waiting for GDB to print output!
No, I don't think that's needed. Say, user ask for a value of variable. GUI
thread invokes a method in gdb controller thread (across thread boundary).
The gdb controller gets all the necessary data by synchnonious calls to gdb
library and when done, does cross-thread call to GUI thread, saying "add var
foo with value 10" to the list of variables. No need to block anything.
- Volodya
next prev parent reply other threads:[~2005-09-07 13:42 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-09-06 15:04 Vladimir Prus
2005-09-06 15:25 ` Daniel Jacobowitz
2005-09-06 15:35 ` Vladimir Prus
2005-09-06 15:42 ` Daniel Jacobowitz
2005-09-07 6:55 ` Vladimir Prus
2005-09-07 13:14 ` Daniel Jacobowitz
2005-09-07 13:42 ` Vladimir Prus [this message]
2005-09-07 18:02 ` Eli Zaretskii
2005-09-06 19:17 ` Eli Zaretskii
2005-09-06 19:29 ` Daniel Jacobowitz
2005-09-07 6:40 ` Vladimir Prus
[not found] ` <17181.45190.337014.159288@gargle.gargle.HOWL>
2005-09-06 15:27 ` Vladimir Prus
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=200509071742.11727.ghost@cs.msu.su \
--to=ghost@cs.msu.su \
--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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).