This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Prints the frame id when target stops


Daniel Jacobowitz wrote:

>> > It would change the behviour of those commands but I guess it could be
>> > added as an option.
>> 
>> It actually won't. If -stack-list-frames is changed to return cached
>> result when it's absolutely clear that the stack did not change, you have
>> no behaviour change, just better performance.
> 
> But Nick is right - it is very hard to determine whether two frames
> with the same frame ID are the same frame across an operation.  

Yes. But:
1. We can regenerate stack frames list when not sure.
2. It's not easier for frontend than it is for gdb.

> It'd be 
> nice if that weren't the case.  The hard case for this is unfortunately
> very hard - but if the front end knows that it did a single step, then
> it's very unlikely to be wrong if the ID is unchanged.  

Oh, if the frontend knows it did just a single "-exec-step", then
gdb knows it too.

> I really don't 
> know what the right thing to do here is.  Guessing based on what the
> last execution was (step, next, vs continue or C-c) might be the best
> we can do :-(
> 
> Here's how it can happen:
> 
> int foo()
> {
>   return 1;
> }
> 
> int bar()
> {
>   char buf[SIZE1];
>   return foo();
> }
> 
> int bar2()
> {
>   char buf[SIZE2];
>   return foo();
> }
> 
> int bar3()
> {
>   char buf[SIZE3];
>   return bar2();
> }
> 
> int main()
> {
>   bar();
>   bar3();
> }
> 
> The backtrace is different in an interesting way here if you set a
> breakpoint on foo and continue twice, but if you choose your buffer
> sizes just right, then you can get the two calls to foo to have the
> same ID.  If your IDE doesn't refresh its stack display, you're
> going to have a stale call trace.

Yes, that's an obvious problem. What makes you think a frontend
is in better position to fix it?

> Apple implemented a very high performance, light weight unwinder that
> just does frame IDs - on PPC this happens to be quite easy.  We could
> make other targets do the same thing.  That probably helps here.

Just to clarify -- you mean you don't get any function names or
code lines so you don't have to look in the symbol tables? And
if this backtrace changes you can get the full backtrace.

- Volodya







Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]