Subject: RE: bug#15101: 24.3.50; debugger-eval-expression broken

From: Drew Adams <[email-masked]>
Date: Thu, 15 Aug 2013 08:06:37 -0700 (PDT)

> > Start Emacs with: emacs -Q --eval '(let ((foo 123)) (debug))'
> > Then press e. Enter foo to evaluate the local variable foo. But it
> > doesn't work; it only generates the error:
> > debugger-eval-expression: Symbol's value as variable is void: foo
> > This used to work fine in previous versions.
> 
> Indeed, this is a change that will trip up users.  Here's what's
> happening: `e' will now run the code in the context in which the "code
> on the current line" was run.
> 
> This refinement can be useful for dynamically bound variables, but was
> mostly added for lexically bound variables, where it's indispensable.
> 
> So the above recipe works again if you use C-p before `e' so that point
> is now on the top-most line, which stands for "in the context that
> called `debug'".
> 
> I think a good fix is to change debug.el so that point starts on the
> first line of the *Debugger* buffer rather than on the second.

In your judgment, can both the old `e' behavior and the new `e' behavior
be useful, at least for dynamically bound variables?

If so, perhaps consider having two different keys, for the two different
behaviors.