standardizing Error.stack or equivalent

John Barton johnjbarton at google.com
Fri Mar 28 09:41:30 PDT 2014


Notice that the eval stack trace is not very useful in the common case that
the buffer is more complex than a single line and the eval is called more
than once. For eval, new Function(), document.write(<script>),
document.appendChild(<script>), and System.module() successful debugging --
and thus stack traces -- require unique, stable names for the buffers.
 With these names, debugging with these features is no different than
normal source; without names, stack traces have limited value.

Stable automatic naming is difficult, since the code that uses these
features often does so inside of asynchronous loops (for loading). Making
it easy for developers to provide names is the simplest improvement for
these dynamic features.  We could have names provided to eval() and new
Function(); we should ensure that new API has names, like System.module().
 That would make a standard stack trace more useful.

jjb



On Thu, Mar 27, 2014 at 11:59 AM, Boris Zbarsky <bzbarsky at mit.edu> wrote:

> On 3/27/14 12:31 PM, Mark Miller wrote:
>
>> Mozillians, why did you add this extra information?
>>
>
> Looks like it was added in https://bugzilla.mozilla.org/
> show_bug.cgi?id=332176
>
> Before that, the stack claimed the url of the caller of eval() but a line
> number which was the sum of the line number of the eval() call itself and
> the line number of the code throwing the exception inside the eval string,
> I believe, or some such insanity.
>
> There's a lot of noise there in the discussion, but I think the key recent
> part is https://bugzilla.mozilla.org/show_bug.cgi?id=332176#c40 which
> summarizes what I think we implemented.  Note that per
> https://bugzilla.mozilla.org/show_bug.cgi?id=332176#c42 we do something
> similar for new Function() as well, so you can get a stack trace like so:
>
> anonymous at http://example.com line 3 > Function:1:1 @http://example.com:3:5
>
>
> for a testcase like this:
>
> <script>
>
>   try {
>     new Function("throw new Error()")();
>   } catch (e) {
>     document.write(e.stack);
>   }
> </script>
>
> -Boris
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140328/0b4029ad/attachment-0001.html>


More information about the es-discuss mailing list