s7mahess
Goto Top

Javascript, verhalten von function und return editieren

Guten Tag,

die letzten Tage habe ich mich mich dem Chrome debugger während des erstellen von Webkit Apps außeinandergesetzt und mir die Ausgabe etwas verschönert, keider komme ich nun an einem Punkt nicht mehr weiter.

Ich möchte nun meine Funktionsaufrufe so umgestallten, dass ich nicht in jede einzelne Funktion die Zeilen die im Unten stehenden Code Auskommentiert sind (use this linesface-smile einfügen muss.

Sozusagen das verhalten beim Launch und beim verlassen der Funktion etwas umschreiben.

Der code am anfang jeder Funktion als erstes ... ausführen:
var debugfunc;
console.group(debugfunc = fly.helper.Debug.logFunc());
fly.helper.Debug.logArgs() == 'noargs' ? '' : console.log(fly.helper.Debug.logArgs());  

und am ende vor jedem return oder beim verlassen:

console.groupEnd(debugfunc);

Ich bitte um mithilfe, mein Know how ist hier leider erschöpft.


Danke
Martin


Im Anhang ist ein Bild wie die Console in Chrome dann aussieht (pretty cool).
Hier noch der Komplette Code was alles in den Funktionen gemacht wird.

//var console = {};
//console.log = function(){};
//console.group = function(){};
//console.groupEnd = function(){};
Ext.define('fly.helper.Debug', {  
    statics: {
        // best view in chrome
        // not working well in eclipse
        // use this lines:
        //	
        //	foo: function() {
	//    	var debugfunc;
	//    	console.group(debugfunc = fly.helper.Debug.logFunc());
	//    	fly.helper.Debug.logArgs() == 'noargs' ? '' : console.log(fly.helper.Debug.logArgs()); 
        //
        //    	[[[ code here ]]]
        //
	//    	console.groupEnd(debugfunc);   // <-- direct before every return value (everywhere where you close the function)
        //  return 
        //  }
        logFunc: function() {
        	try {
        		var logDate = new Date();
                var time = ((logDate.getHours() > 9) ? logDate.getHours() : '0' + logDate.getHours())   
                    + ":" + ((logDate.getMinutes() > 9) ? logDate.getMinutes() : '0' + logDate.getMinutes())   
                    + ":" + ((logDate.getSeconds() > 9) ? logDate.getSeconds() : '0' + logDate.getSeconds())   
                    + ":" + logDate.getMilliseconds();  
                var file =  " --> " + arguments.callee.caller.$owner.$className ;  
                var func = ": " + arguments.callee.caller.$name;  
                var string = time + file + func;
                return string;
        	} catch (err) {
        		var returnvalue = new Array('Error within logFunc');  
        		return returnvalue
        	}
        },
        
        logArgs: function() {
            try {
        		var returnvalue = new Array();
            	if (arguments.callee.caller.length > 0) {
                    for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                        returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                    }
                    return returnvalue
                } else {
                	return 'noargs'  
                }
            } catch (err) {
            	var returnvalue = new Array('Error within logArgs');  
                return returnvalue
            }       
        },
    }
});

35530fcc2428265dd2a1281274efff50

Content-Key: 186918

Url: https://administrator.de/contentid/186918

Printed on: April 16, 2024 at 20:04 o'clock

Member: s7mahess
s7mahess Jul 06, 2012 at 08:30:19 (UTC)
Goto Top
Hab die Lösung face-smile

funktioniert zwar in der form nur mit sencha touch, aber vieleicht hilft es jemanden mal face-smile

 
showAnyConsole = true;
showConsoleGroup = false;
showArguments = false;
showConsoleTime = false;
showWebkitEvents = false;

/* 
 * Store this all under "app/helper/debug.js" 
 * 
 * You have to edit some lines below to get this all working
 * 
 * line 62 63 your have to replace "fly." with your app name, dont miss the "." 
 * in line 73 230 249 252 269 270 349 371 544 as well :-)
 * 
 * you have to add the file to your index debug html like this:
 * <script type="text/javascript" src="app/helper/debug.js"></script> *  
 * 
 * add to the array in line 213 all functions which break the debug.js, i have 2 which are not working :-(
 */



if (!showAnyConsole) {
    console = {};
    console.log = function(){};
    console.group = function(){};
    console.groupEnd = function(){};
    console.groupCollapsed = function(){};
    console.time = function(){};
    console.timeEnd = function(){};
    console.debug = function(){};
    console.info = function(){};
    console.warn = function(){};
    console.error = function(){};
    console.assert = function(){};
    console.clear = function(){};
    console.dir = function(){};
    console.dirxml = function(){};
    console.trace = function(){};
    console.time = function(){};
    console.timeEnd = function(){};
    console.profile = function(){};
    console.profileEnd = function(){};
    console.count = function(){};
    console.exception = function(){};
    console.table = function(){};
}
if (!showConsoleGroup) {
    console.group = function(){};
    console.groupEnd = function(){};
    console.groupCollapsed = function(){};
}
if (!showConsoleTime) {
    console.time = function(){};
    console.timeEnd = function(){};
}

Ext.override(Ext.app.Controller, {
    constructor: function(config) {
        var that = this;
        var test = that.__proto__.$className.indexOf('fly.');  
        if (that.__proto__.$className.indexOf('fly.') != -1) {  
            fly.helper.Debug.addDebug(that.__proto__)
        }
        this.initConfig(config);
        this.mixins.observable.constructor.call(this, config);
        

    }
})

Ext.define('fly.helper.Debug', {  
    statics: {
        addDebug: function(TemplateClass) {
            function augment(withFn) {
                var SenchaUnwanted = [
                        'configClass',  
                        'self',  
                        'superclass',  
                        'defaultConfig',  
                        'config',  
                        'initConfigList',  
                        'initConfigMap',  
                        'configClass',  
                        '$className',  
                        'initGetProfile',  
                        'getProfile',  
                        'setProfile',  
                        'initGetViewCache',  
                        'getViewCache',  
                        'setViewCache',  
                        'constructor',  
                        'execute',  
                        'applyBefore',  
                        'applyControl',  
                        'applyRefs',  
                        'applyRoutes',  
                        'applyStores',  
                        'applyModels',  
                        'applyViews',  
                        'getFullyQualified',  
                        'control',  
                        'ref',  
                        'getRef',  
                        'hasRef',  
                        'initGetRefs',  
                        'getRefs',  
                        'setRefs',  
                        'initGetRoutes',  
                        'getRoutes',  
                        'setRoutes',  
                        'initGetControl',  
                        'getControl',  
                        'setControl',  
                        'initGetBefore',  
                        'getBefore',  
                        'setBefore',  
                        'initGetApplication',  
                        'getApplication',  
                        'setApplication',  
                        'initGetStores',  
                        'getStores',  
                        'setStores',  
                        'initGetModels',  
                        'getModels',  
                        'setModels',  
                        'initGetViews',  
                        'getViews',  
                        'setViews',  
                        'destroy',  
                        'mixins',  
                        'requires',  
                        'mixinConfig',  
                        'alternateClassName',  
                        'isObservable',  
                        'observableType',  
                        'validIdRegex',  
                        'observableIdPrefix',  
                        'listenerOptionsRegex',  
                        'applyListeners',  
                        'applyBubbleEvents',  
                        'getOptimizedObservableId',  
                        'getObservableId',  
                        'getOptimizedEventDispatcher',  
                        'getEventDispatcher',  
                        'getManagedListeners',  
                        'getUsedSelectors',  
                        'fireEvent',  
                        'fireAction',  
                        'doFireEvent',  
                        'doAddListener',  
                        'addDispatcherListener',  
                        'doRemoveListener',  
                        'removeDispatcherListener',  
                        'clearManagedListeners',  
                        'changeListener',  
                        'addListener',  
                        'addBeforeListener',  
                        'addAfterListener',  
                        'removeListener',  
                        'removeBeforeListener',  
                        'removeAfterListener',  
                        'clearListeners',  
                        'hasListener',  
                        'suspendEvents',  
                        'resumeEvents',  
                        'relayEvents',  
                        'relayEvent',  
                        'createEventRelayer',  
                        'enableBubble',  
                        'createEventBubbler',  
                        'getBubbleTarget',  
                        'addEvents',  
                        'onClassMixedIn',  
                        'initGetListeners',  
                        '_listeners',  
                        'getListeners',  
                        'setListeners',  
                        'initGetBubbleEvents',  
                        '_bubbleEvents',  
                        'getBubbleEvents',  
                        'setBubbleEvents',  
                        'isIdentifiable',  
                        'idCleanRegex',  
                        'defaultIdPrefix',  
                        'defaultIdSeparator',  
                        'getOptimizedId',  
                        'getUniqueId',  
                        'setId',  
                        'getId',  
                        'on',  
                        'un',  
                        'onBefore',  
                        'onAfter',  
                        'unBefore',  
                        'unAfter',  
                        'isInstance',  
                        'statics',  
                        'callParent',  
                        'wasInstantiated',  
                        'initConfig',  
                        'beforeInitConfig',  
                        'getCurrentConfig',  
                        'setConfig',  
                        'getConfig',  
                        'hasConfig',  
                        'getInitialConfig',  
                        'onConfigUpdate',  
                        'callOverridden',  
                        '_profile',  
                        'refresh'  
        	           ]
    	        var OwnUnwanted = [
//                        'getViewName', 
//                        'createView', 
//                        'getDevice' 
    	               ]
                var name, fn;
                for (name in TemplateClass) {
                	if (SenchaUnwanted.indexOf(name) == -1 && OwnUnwanted.indexOf(name) == -1) {
                        fn = TemplateClass[name];
                        if (typeof fn === 'function') {  
                            TemplateClass[name] = (function(name, fn) {
                                var args = arguments;
                                return function() {
                                    if ((typeof withFn.apply == 'function') && (typeof fn.apply == 'function') && (fn.$owner != 'undefined'))   
                                    {
                                        var debugfunc = withFn.apply(this, args);
                                        if (debugfunc && showArguments) {
                                            fly.helper.Debug.logArgsDebugJs(fn, arguments) == 'noargs' ? '' : console.log(fly.helper.Debug.logArgsDebugJs(fn, arguments));  
                                        }
                                        var returnvalue = fn.apply(this, arguments);
                                        if (debugfunc) {
                                        	if (showConsoleTime) {
                                                console.timeEnd(debugfunc);
                                        	}
                                        	if (showConsoleGroup) {
                                        	   console.groupEnd(debugfunc);
                                        	}
                                        }
                                        return returnvalue
                                    }
                                }
                            })(name, fn);
                        }
                	}
                }
            }
            augment(function(name, fn) {
                if (fly.helper.Debug.logFuncDebugJs(fn)) {
                	var debugfunc;
                	if (showConsoleGroup) {
                		console.group(debugfunc = fly.helper.Debug.logFuncDebugJs(fn));
                	} else { console.log (debugfunc = fly.helper.Debug.logFuncDebugJs(fn)) }
                    if (showConsoleTime) {
                    	console.time(debugfunc)
                    }
                    return debugfunc;
                } else {
                	return false
                }
            });
        },
        
        /*
         * not working well in eclipse aka logcat
         * use this lines when you annt to add the code Mannuel to each function:
         * foo: function() {
         *     var debugfunc;
         *       console.group(debugfunc = fly.helper.Debug.logFuncManual());
         *       fly.helper.Debug.logArgsManual() == 'noargs' ? '' : console.log(fly.helper.Debug.logArgsManual()); 
         *
         *        [[[ code here ]]]
         *
         *       // <-- direct before every return value (everywhere where you close the function)
         *       return 
         *   }
         */
        
        logFuncManual: function() {
            try {
                var file = arguments.callee.caller.$owner.$className;
                var func = ": " + arguments.callee.caller.$name;  
                var string = file + func;
                return string;
            } catch (err) {
                var returnvalue = new Array('Error within logFunc');  
                return returnvalue
            }
        },
        
        logArgsManual: function() {
            try {
                var returnvalue = new Array();
                if (arguments.callee.caller.length > 0) {
                    for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                        returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                    }
                    return returnvalue
                } else {
                    return 'noargs'  
                }
            } catch (err) {
                var returnvalue = new Array('Error within logArgs');  
                return returnvalue
            }
        },
        
        /*
         * these are the modified versions of the 2 methods above to work in the debug.js
         */
        logFuncDebugJs: function(fn, arguments) {
            try {
                var file = '';  
                var func = '';  
                try {
                    file = fn.$owner.$className;
                    func = ": " + fn.$name;  
                    var string = file + func;
                    return string;
                } catch  (err) {
                    func = 'unknown function';  
                    return false;
                }
            } catch (err) {
                var returnvalue = new Array('Error within logFunc');  
                return returnvalue
            }
        },
        
        logArgsDebugJs: function(fn, arguments) {
            try {
                var returnvalue = new Array();
                if (arguments.length > 0) {
                    for (var argumentIndex = 0; argumentIndex < arguments.length; argumentIndex++) {
                        returnvalue = returnvalue.concat(arguments[argumentIndex])
                    }
                    return returnvalue
                } else {
                    return 'noargs'  
                }
            } catch (err) {
                var returnvalue = new Array('Error within logArgs');  
                return returnvalue
            }
        },

        /*
         * working in eclipse 
         * call this way: console.log(fly.helper.Debug.consoleOutput());
         */ 
        consoleOutput: function() {
            try {
                var logDate = new Date();
                var args = '';  
                if (arguments.callee.caller.length > 0) {
                    args = ' with Arguments: ';  
                    for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                        args = args + argumentIndex + ': ' + arguments.callee.caller.arguments[argumentIndex];  
                        if (argumentIndex < arguments.callee.caller.length - 1) {
                            args = args + ', '  
                        }
                    }
                }
                return arguments.callee.caller.$owner.$className + ": " + arguments.callee.caller.$name + args  
            } catch (err) {
                return 'Error within consoleOutput'  
            }
        },

        /*
         * call this way:  console.log(Array.prototype.slice.call(fly.helper.Debug.logOutput()));
         */ 
        logOutput: function() {
            try {
                var file = " --> " + arguments.callee.caller.$owner.$className;  
                var func = ": " + arguments.callee.caller.$name;  
                var string = file + func;
                var args = arguments.callee.caller.arguments;
                var returnvalue = new Array(string);
                if (arguments.callee.caller.length > 0) {
                    for (var argumentIndex = 0; argumentIndex < arguments.callee.caller.length; argumentIndex++) {
                        returnvalue = returnvalue.concat(arguments.callee.caller.arguments[argumentIndex])
                    }
                    return returnvalue
                } else {
                    return 'noargs'  
                }
            } catch (err) {
                var returnvalue = new Array('Error within logOutput');  
                return returnvalue
            }
        },
        
        logwebkitevents: function() {
            var known = [
                'abort',   
                'beforecopy',   
                'beforecut',   
                'beforeload',   
                'beforepaste',   
                'beforeprocess',   
                'beforeunload',   
                'blur',   
                'cached',   
                'change',   
                'checking',   
                'click',   
                'close',   
                'complete',   
                'compositionend',   
                'compositionstart',   
                'compositionupdate',   
                'connect',   
                'contextmenu',   
                'copy',   
                'cut',   
                'dblclick',   
                'devicemotion',   
                'deviceorientation',   
                'display',   
                'downloading',   
                'drag',   
                'dragend',   
                'dragenter',   
                'dragleave',   
                'dragover',   
                'dragstart',   
                'drop',   
                'error',   
                'focus',   
                'focusin',   
                'focusout',   
                'formchange',   
                'forminput',   
                'hashchange',   
                'input',   
                'invalid',   
                'keydown',   
                'keypress',   
                'keyup',   
                'load',   
                'loadstart',   
                'message',   
                'mousedown',   
                'mousemove',   
                'mouseout',   
                'mouseover',   
                'mouseup',   
                'mousewheel',   
                'noupdate',   
                'obsolete',   
                'offline',   
                'online',   
                'open',   
                'overflowchanged',   
                'pagehide',   
                'pageshow',   
                'paste',   
                'popstate',   
                'readystatechange',   
                'reset',   
                'resize',   
                'scroll',   
                'search',   
                'select',   
                'selectstart',   
                'storage',   
                'submit',   
                'textInput',   
                'unload',   
                'updateready',   
                'write',   
                'writeend',   
                'writestart',   
                'zoom',   
                'DOMActivate',   
                'DOMFocusIn',   
                'DOMFocusOut',   
                'DOMAttrModified',   
                'DOMCharacterDataModified',   
                'DOMNodeInserted',   
                'DOMNodeInsertedIntoDocument',   
                'DOMNodeRemoved',   
                'DOMNodeRemovedFromDocument',   
                'DOMSubtreeModified',   
                'DOMContentLoaded',   
                'webkitBeforeTextInserted',   
                'webkitEditableContentChanged',   
                'canplay',   
                'canplaythrough',   
                'durationchange',   
                'emptied',   
                'ended',   
                'loadeddata',   
                'loadedmetadata',   
                'pause',   
                'play',   
                'playing',   
                'ratechange',   
                'seeked',   
                'seeking',   
                'timeupdate',   
                'volumechange',   
                'waiting',   
                'webkitbeginfullscreen',   
                'webkitendfullscreen',   
                'progress',   
                'stalled',   
                'suspend',   
                'webkitAnimationEnd',   
                'webkitAnimationStart',   
                'webkitAnimationIteration',   
                'webkitTransitionEnd',   
                'orientationchange',   
                'timeout',   
                'touchstart',   
                'touchmove',   
                'touchend',   
                'touchcancel',   
                'success',   
                'loadend',   
                'webkitfullscreenchange',   
                'webkitspeechchange',   
                'webglcontextlost',   
                'webglcontextrestored',   
                'webglcontextcreationerror',   
                'audioprocess'  
            ];
            
            function lognamed(name) {
                document.addEventListener(name, function() {
                    console.log(name);
                }, true);
            }
            
            known.forEach(function(name) {
                lognamed(name);
            });
        }
    }
});

if (showWebkitEvents) {
    fly.helper.Debug.logwebkitevents()
}