JSFiddle - React, Tailwind, and code Playground
by kentaromiura
JavaScript
window.onerror = function(a, file, c){
var callstack = [],
who = arguments.callee.caller;
while(who){
if(who._traced)break;
who._traced=true;
var name = ''+who, args = who.arguments;
var serializedArguments = [];
for(var i=0,max=args.length;i<max;i++){
try{
serializedArguments.push(JSON.encode(args[i]));
}catch(ex){
serializedArguments.push(''+args[i]);
}
}
callstack.push((name.substring(name.indexOf('function') +8,name.indexOf('(')) || who.$name || 'anonymous') + '(' + serializedArguments.join(',') + ')');
who = who.caller;
}
if(who){
var name = ''+who, fname = (name.substring(name.indexOf('function') +8,name.indexOf('(')) || who.$name || 'anonymous');
callstack.push(' - not available - recursive call ('+fname+')');
}
alert(a+ ' in ' + file + 'row: ' + c +'\nStack:'+ callstack.join('\n'));
}
var flag = false;
function b(){
if(flag) throw 'Error';
flag = true;
a();
}
function a(){
b()
}
a();