When debugging complicated JavaScript one thing I find myself constantly doing is using console.log()
to print out what functions are being called in what order. JavaScript is single-threaded and event driven so it’s often not entirely clear what functions will be called in what order.
Traditionally I’ve done something like this:
function foo(bar) { console.log('foo('+bar+')'); }
but last night I came up with something better. It’s probably not completely portable but it seems to work fine in recent Chrome / Safari / Firefox, which is really all I’m going to be using for debugging anyway:
function logCall() { console.log(logCall.caller.name + '(' + Array.prototype.slice.call(logCall.caller.arguments) .map(JSON.stringify).join(', ') + ')'); }
Just add logCall()
to the start of functions and the function call (including serialized arguments) will be logged to the console. Easy and foolproof.
Can you not just set a breakpoint in the js debugger in firebug/chrome dev tools and follow the calls though you get the arguments and ability to live edit code/variables!