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();