Debugger.as

Go to the documentation of this file.
00001 import gugga.debug.MethodCallInfo;
00002 import gugga.logging.Level;
00003 import gugga.logging.Logger;
00004 import gugga.utils.DebugUtils;
00005 import gugga.utils.Weaver;
00006 import gugga.logging.publishers.SOSPublisher;
00007 import gugga.utils.ReflectUtil;
00008 import gugga.events.EventDispatcher;
00012 class gugga.debug.Debugger 
00013 {
00014         private var mDebuggedObject : Object;
00015         public function get DebuggedObject() : Object { return mDebuggedObject; }
00016         
00017         private function Debugger(aDebuggedObject : Object)
00018         {
00019                 mDebuggedObject = aDebuggedObject;
00020                 
00021                 Weaver.weaveToAllAccessors(mDebuggedObject, traceContextFiner, traceContextFinished);
00022         
00023                 var methodNames : Array = ReflectUtil.getMethodNames(mDebuggedObject);  
00024                 
00025                 var methodName : String;
00026                 for(var i : Number = 1; i < methodNames.length; i++)
00027                 {
00028                         methodName = methodNames[i];
00029                         if(methodName != "addEventListener" && methodName != "dispatchEvent" && methodName != "dispatchEventLater")
00030                         {
00031                                 if(methodName.indexOf("on") == 0 && methodName.charCodeAt(2) >= 65 && methodName.charCodeAt(2) <= 90)
00032                                 {
00033                                         Weaver.weaveToMethod(aDebuggedObject, methodName, traceEventHandler, traceContextFinished);
00034                                 }
00035                                 else
00036                                 {
00037                                         Weaver.weaveToMethod(aDebuggedObject, methodName, traceContextFine, traceContextFinished);
00038                                 }
00039                         }
00040                 }
00041                 
00042                 if(aDebuggedObject["addEventListener"])
00043                 {
00044                         Weaver.weaveToMethod(aDebuggedObject, "addEventListener", traceContextFinest, traceContextFinished);
00045                 }
00046                 if(aDebuggedObject["dispatchEvent"])
00047                 {
00048                         Weaver.weaveToMethod(aDebuggedObject, "dispatchEvent", traceDispatchEvent, traceContextFinished);
00049                 }
00050                 if(aDebuggedObject["dispatchEventLater"])
00051                 {
00052                         Weaver.weaveToMethod(aDebuggedObject, "dispatchEventLater", traceDispatchEvent, traceContextFinished);
00053                 }
00054         }
00055         
00056         public static function create(aDebuggedObject : Object) : Debugger
00057         {
00058                 return new Debugger(aDebuggedObject);
00059         }
00060         
00061         private function traceEventHandler(aCallData:MethodCallInfo)
00062         {
00063                 var logger : Logger = Logger.getLoggerFor(aCallData.ScopeObject);               
00064                 var contextString : String = DebugUtils.getCallContextString(aCallData.ScopeObject, aCallData.Arguments);
00065                 var eventInfo : String = DebugUtils.getDumpString(aCallData.Arguments[0]);
00066                 
00067                 var logString:String = SOSPublisher.getFoldedMessagePackage(contextString, eventInfo);
00068                 
00069                 logger.log(Level.FINER, logString);
00070         }
00071 
00072         private function traceDispatchEvent(aCallData:MethodCallInfo)
00073         {
00074                 var logger : Logger = Logger.getLoggerFor(aCallData.ScopeObject);               
00075                 var contextString : String = DebugUtils.getCallContextString(aCallData.ScopeObject, aCallData.Arguments);
00076                 var eventInfo : String = DebugUtils.getDumpString(aCallData.Arguments[0]);
00077                 
00078                 var logString:String = SOSPublisher.getFoldedMessagePackage(contextString, eventInfo);
00079                 
00080                 logger.log(Level.FINER, logString);
00081         }
00082         
00083         private function traceContextFinished(aCallData:MethodCallInfo, aMethodResult)
00084         {
00085                 var logger : Logger = Logger.getLoggerFor(aCallData.ScopeObject);               
00086                 var logText : String = DebugUtils.getCallContextString(aCallData.ScopeObject, aCallData.Arguments);
00087                 
00088                 var methodResultString : String = DebugUtils.objectToString(aMethodResult);
00089                 logText = logText + " finished! Returned: " + methodResultString;
00090                 
00091                 var typeofMethodResult : String = typeof(aMethodResult);
00092                 if(typeofMethodResult == "object" || typeofMethodResult == "movieclip" || typeofMethodResult == "function")
00093                 {
00094                         var methodResultDump : String = DebugUtils.getDumpString(aMethodResult, 0);
00095                         var logTextBody : String = "Returned result dump:\n" + methodResultDump;
00096                         
00097                         logText = SOSPublisher.getFoldedMessagePackage(logText, logTextBody);
00098                 }
00099                 
00100                 logger.log(Level.FINEST, logText);
00101         }
00102         
00103         private static function traceContext(aCallData:MethodCallInfo, aLogLevel:Level)
00104         {
00105                 var logger : Logger = Logger.getLoggerFor(aCallData.ScopeObject);               
00106                 var contextString : String = DebugUtils.getCallContextString(aCallData.ScopeObject, aCallData.Arguments);
00107                 
00108                 if(aCallData.Arguments.length > 0)
00109                 {
00110                         var argumentsDump : String = DebugUtils.getDumpString(aCallData.Arguments, 1);
00111                         var logTextBody : String = "Arguments dump:\n" + argumentsDump;
00112                         
00113                         contextString = SOSPublisher.getFoldedMessagePackage(contextString, logTextBody);
00114                 }
00115                 
00116                 logger.log(aLogLevel, contextString);
00117         }       
00118                         
00119         private function traceContextFine(aCallData:MethodCallInfo)
00120         {
00121                 Debugger.traceContext(aCallData, Level.FINE);
00122         }
00123 
00124         private function traceContextFiner(aCallData:MethodCallInfo)
00125         {
00126                 Debugger.traceContext(aCallData, Level.FINER);
00127         }
00128 
00129         private function traceContextFinest(aCallData:MethodCallInfo)
00130         {
00131                 Debugger.traceContext(aCallData, Level.FINEST);
00132         }
00133 }

Generated on Fri May 11 17:12:42 2007 for GuggaFramework by  doxygen 1.5.2