function(context, functionName, callback) {
	        context = context || window;
	        var original = context[functionName];
	        context[functionName] = function instrumented() {
	            callback.call(this, printStackTrace().slice(4));
	            return context[functionName]._instrumented.apply(this, arguments);
	        };
	        context[functionName]._instrumented = original;
	    }
function(context, functionName, callback) {
	        context = context || window;
	        var original = context[functionName];
	        context[functionName] = function instrumented() {
	            callback.call(this, printStackTrace().slice(4));
	            return context[functionName]._instrumented.apply(this, arguments);
	        };
	        context[functionName]._instrumented = original;
	    }
function ( context , functionName , callback ) { context = context || window ; var original = context [ functionName ] ; context [ functionName ] = function instrumented ( ) { callback . call ( this , printStackTrace ( ) . slice ( 4 ) ) ; return context [ functionName ] . _instrumented . apply ( this , arguments ) ; } ; context [ functionName ] . _instrumented = original ; }
Given a context, function name, and callback function, overwrite it so that it calls
printStackTrace() first with a callback and then runs the rest of the body.

@param {Object} context of execution (e.g. window)
@param {String} functionName to instrument
@param {Function} callback function to call with a stack trace on invocation
Given a context function name and callback function overwrite it so that it calls printStackTrace () first with a callback and then runs the rest of the body .