On Fri, Apr 06, 2007 at 11:50:01AM +0100, Rob Quill wrote:
> >int i = 0;
> >int j = 2;
> >int n = CalculateSomething( j, &i );
> >int k = 3;
> 
> I don't really understand, because the problem remains that if you
> break before int n... and do print n you get a value, whereas you
> should get an error saying the variable is not in scope.

The current behavior is that you will get a random value.  As you say, it
could be fixed.  But it's relatively minor, and fixing it has a cost (the
debug information must increase in size).  If someone wants to put
together a patch to implement the extra scope directives AND reports
actual measurements on the size increase that results (for 2-3 large FLOSS
C++ programs, for example) AND the bloat created is small, it could be a
useful feature.

It could even help with a case that has gotten me into trouble.  Consider

         Foo foo = functionReturningFoo();

Now, let's say that Foo is a complex object containing pointers, and
there's a member function Foo::p() const that pretty-prints Foo on
the standard error, put there explicitly for calling in debuggers.
Suppose I mistakenly put the breakpoint on this line and tell gdb

(gdb) call foo.p()

But foo has not yet initialized, it is random stack junk, so Foo::p
is likely to crash the application.  If, instead, gdb were to report
that foo doesn't exist (or use a foo from an outer scope), this source
of debugger crashes would be eliminated.

Anyway, I think it's up to the proponents of your idea to provide
a patch and make the case for its conclusion.  If the size increase
is insignificant, no problem.

Reply via email to