Trace
Function Stack Trace
by phrontisteries
HTML
<html>
<head>
<script>
window.crisp = {
//clog, // default console.log()
//cclear, // default console.clear()
//outputDiv, // DOM element
funclog: [], // function stack [current,first]
stack: function() {
return (new Error('crisp.stack').stack).match(/(?!at )\b\w+(?= )/gm).slice(1); // remove self
},
log: function(t) {
var trace = crisp.stack().slice(1), // remove self
logobj = {
'f': trace[0],
'l': t,
's': trace
};
crisp.funclog.push(logobj);
var tree = new Tree(); tree.values = logobj;
crisp.div.innerText = tree;
/*try {
crisp.div.innerText += JSON.stringify(logobj) + "\n";
} catch (err) {
crisp.div.innerText += JSON.stringify(err.name+": "+err.message) + "\n";
} finally {
crisp.clog(logobj);
}*/
},
clear: function(t) {
crisp.div.innerText = "";
crisp.cclear();
},
init: function() {
// internal vars
var outputDivUniqueID = "consoleLogOutPutDiv";
// copy default
var consolelog = console.log;
console.log = function(){
var result = consolelog.apply(this, arguments);
crisp.log();
return result;
}
var consolelog = console.log;
var consoleclear = console.clear;
console.log(consolelog.toString());
console.log(consoleclear.toString());
// create div
crisp.div = document.getElementById(outputDivUniqueID);
if (crisp.div ? false : true) {
crisp.div = document.createElement('div');
crisp.div.id = outputDivUniqueID;
crisp.div.show = function() {
crisp.div.style.display = 'block';
};
crisp.div.hide = function() {
...
JavaScript
function hello() {
crisp.clear();
console.log("1");
console.log("2");
console.log("3");
console.log("4");
//var allFuncs = console.funclog;
//console.log(allFuncs);
//console.clear();
//console.log(crisp.stack())
console.log(crisp.funclog);
}
function sello() {
hello();
}
sello();