motion
Version:
motion - moving development forward
60 lines (47 loc) • 1.42 kB
JavaScript
var stacktrace = require('stack-trace');
var oldStackTraceLimit = Error.stackTraceLimit;
var oldCaptureStackTrace = Error.captureStackTrace;
var oldError = Error;
function BetterError(message) {
console.log('in constructor');
oldError.captureStackTrace(this, BetterError);
this.message = message;
this.name = 'Error';
};
BetterError.prototype = Error.prototype;
BetterError.stackTraceLimit = Error.stackTraceLimit;
BetterError.captureStackTrace = Error.captureStackTrace;
Error = BetterError;
oldError.stackTraceLimit = Infinity;
oldError.prepareStackTrace = function(_, frames) { console.log('preparing'); return frames; };
function capture(e) {
if (typeof Error.prepareStackTrace !== 'undefined') {
return stacktrace.parse(e);
}
var oldLimit = Error.stackTraceLimit;
Error.stackTraceLimit = Infinity;
var v8Handler = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, v8StackTrace) {
return v8StackTrace;
};
var v8StackTrace = e.stack;
Error.prepareStackTrace = v8Handler;
Error.stackTraceLimit = oldLimit;
return v8StackTrace;
};
function foo(a, b) {
//console.log(stacktrace.get()[0].getFunction().arguments);
var e = new Error('crap');
console.log(e.stack[0].getFunction().arguments);
throw e;
}
function bar() {
foo(1, 5);
}
try {
bar()
}catch(e) {
var frames = e.stack;
//console.log(frames);
console.log(frames[0].getFunction().arguments);
}