Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jim Ingham <jingham@apple.com>
To: gdb-patches@sources.redhat.com
Subject: Re: [PATCH] -stack-select-frame
Date: Fri, 17 Jun 2005 17:45:00 -0000	[thread overview]
Message-ID: <195D52F1-9F52-4BCC-BCF9-9036F9CBEBF8@apple.com> (raw)
In-Reply-To: <1119003319.5434.ezmlm@sources.redhat.com>


On Jun 17, 2005, at 3:15 AM, gdb-patches-digest- 
help@sources.redhat.com wrote:

>
>
>
> [Jason - Sorry if you get this twice.  My first message bounced at  
> RedHat, for
> some reason.]
>
>
>>> I thought it would save some time if the user doesn't need to see  
>>> the
>>> whole stack.
>>>
>>
>> FWIW we've done a lot of careful timing analysis, and the back &
>> forth communication between our GUI and gdb is so fast as to be
>> pointless to optimize.  We original considered adding special purpose
>> "give Xcode everything it needs to know at a breakpoint hit" type
>> commands but when we saw how fast the majority of MI commands can
>> execute & be parsed by the GUI, it was obvious that this was not a
>> useful area to optimize.  And frankly, in my anecdotal experience,
>> MacOS X isn't the fastest OS at things like "two processes talking
>> over a pipe".
>>
>
> You've clearly been more quantitative.  With my limited resources, I'm
> just guessing what might work best.  I've suggested to Daniel a change
> that, I hope, won't impact on Xcode.  I think you have your own copy
> of GDB and, like you say, you don't really care, but I guess its best
> not to diverge more than necessary.

Yes, thats right.  We would rather not introduce gratuitous divergences.

>
>
>> (one of the parts of this profiling which is especially useful is
>> that we have a "mi-timings-enabled" setting.  When it's enabled,
>> every MI command reports how long gdb took to complete it, e.g. the
>> "time=" bit at the end here:
>>
>> -> 50-stack-list-frames 0 5
>> <- 50^done,stack=[frame=
>> {level="0",addr="0x0009e7fc",fp="0xbfffe700",func=" [...] ,frame=
>> {level="5",addr="0x936265d0",fp="0xbfffeee0",func="-[NSApplication
>> run]"}],time=
>> {wallclock="0.14353",user="0.00584",system="0.00335",start="111895234 
>> 8.0
>> 03847",end="1118952348.147372"}
>>
>
> Yes but what happens when the stack is much deeper, 20 or 30 say,  
> like it can
> be when you you are debugging Emacs, or GDB for that matter?


You are right to worry about this a bit.  Getting a full backtrace  
when the stack is deep can be expensive, especially when you do it  
every step.  And using a complex kit like AppKit or Carbon where lots  
of the work is done through callbacks, etc, can lead to really deep  
stacks as well.  OTOH, the stack window is sitting there open, so we  
have to keep it up to date.  We got hit with this pretty early on in  
getting Xcode working.

What we did was add another command (-stack-list-frames-lite) that  
just returns the pairs (pc/sp) for the current stack.  You can  
usually implement this to run quite quickly on the target side  
without having to do the full register unwind, etc (*).  Then every  
time we stop, Xcode calls this -stack-list-frames-lite, and compares  
the results with the stack it had before the target started up.  Then  
it only needs to fetch the frames that have changed.  For extra  
credit, it could not fetch the frames for any that aren't visible in  
the current stack window in the GUI, though Xcode hasn't done that yet.

We still pay a cost when you arrive in a totally new stack.  But  
since the target usually has to run a bit for the stack to change a  
lot, this cost gets mixed in with the target running, and doesn't  
create such a bad perceived slowness.  But it removes most of the  
problems that stack tracing gave us when stepping, which is where a  
lag really annoys users.


(*) I think Andrew's design of the frame caching stuff should make  
this unnecessary if the architecture specific unwinders were smart  
enough to only unwind the one register they were asked to every  
time.  We haven't done that yet, but that's more an implememtation  
detail.

Jim


>
> Nick
>


       reply	other threads:[~2005-06-17 17:45 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1119003319.5434.ezmlm@sources.redhat.com>
2005-06-17 17:45 ` Jim Ingham [this message]
2005-06-16  3:36 Nick Roberts
2005-06-16  4:42 ` Daniel Jacobowitz
2005-06-16  6:41   ` Nick Roberts
2005-06-16 13:21     ` Daniel Jacobowitz
2005-06-16 22:58       ` Nick Roberts
2005-06-16 23:20         ` Bob Rossi
2005-06-16 23:47         ` Daniel Jacobowitz
2005-06-17  3:07           ` Nick Roberts
2005-06-17  3:21             ` Daniel Jacobowitz
2005-06-17  7:37               ` Nick Roberts
2005-06-17 10:15                 ` Eli Zaretskii
2005-06-17 13:33                   ` Daniel Jacobowitz
2005-06-18  8:56                     ` Eli Zaretskii
2005-06-17  9:55               ` Eli Zaretskii
2005-06-17  9:46             ` Eli Zaretskii
2005-06-16 18:23 ` Eli Zaretskii
2005-06-16 20:15 ` Jason Molenda
2005-06-16 23:04   ` Nick Roberts
2005-06-16 23:30     ` Jason Molenda
2005-06-17  7:22       ` Nick Roberts
2005-06-17 13:30         ` Daniel Jacobowitz
2005-06-17 19:48         ` Jason Molenda
2005-06-17 22:35         ` Stan Shebs
2005-06-17 22:59           ` Daniel Jacobowitz
2005-06-17 23:31           ` Nick Roberts

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=195D52F1-9F52-4BCC-BCF9-9036F9CBEBF8@apple.com \
    --to=jingham@apple.com \
    --cc=gdb-patches@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