2016-05-20 4:13 GMT+02:00 Jesse Schalken <m...@jesseschalken.com>: > > On Fri, May 20, 2016 at 4:35 AM, Rasmus Schultz <ras...@mindplay.dk> > wrote: > >> This is inconsistent with at least JavaScript and C#, where the stack >> trace is populated at the throw site. (Probably others?) >> > > I'm not sure about C#, but in JavaScript (Node.js): > > function get_error() { > return new Error('my error'); > } > > function do_throw(e) { > throw e; > } > > try { > do_throw(get_error()); > } catch (e) { > console.log(e.stack); > } > > > results in: > > Error: my error > at get_error (/home/jesse/src/test.js:2:12) > at Object.<anonymous> (/home/jesse/src/test.js:10:14) > at Module._compile (module.js:413:34) > at Object.Module._extensions..js (module.js:422:10) > at Module.load (module.js:357:32) > at Function.Module._load (module.js:314:12) > at Function.Module.runMain (module.js:447:10) > at startup (node.js:146:18) > at node.js:404:3 > > > The top frame is the construction (get_error) and the site of the throw > (do_throw) doesn't appear in the stack at all. >
The comparison with JavaScript isn't a good one, since you can throw everything in JS. If they didn't provide the stack trace upon throw, you would not have a stack trace at all if you throw a plain string.