Hi, > > Is it possible to override global functions such as trace( ) ?� For example, sometimes I want the trace( ) to tell me where they are called from, but it's kinda a pain to have to import getQualifiedClassName and sprinkle code with stuff like (getQualifiedClassName(this) + ": " + ...); all over the place. >
you can override the global trace function at the class level ---- package foobar { public class MyClass { public function MyClass() { trace( "hello world" ); //output "[ hello world ]" } protected function trace( ...args ):void { args.unshift( "[" ); args.push( "]" ); var msg:String = args.join(" "); public::trace( msg ); //thanks namespaces } } } ---- if you're using a debug version of flash you can use a StackTrace trick to have more infos in your overrided trace ---- protected function trace( ...args ):void { var stackTrace: String; try { throw new Error(); } catch ( e:Error ) { stackTrace = e.getStackTrace(); } stackTrace = stackTrace.split( "\n" )[2]; args.unshift( getTimer() + " - [" ); args.push( "] - " + stackTrace ); var msg:String = args.join(" "); public::trace( msg ); } ---- will output something like 123 - [ hello world ] - at foobar::MyClass/MyClass()[/tmp/foobar/MyClass.as:12] alos you can use flash.trace.Trace and you will really trace everything and maybe more than you wish (undocumented in Flash but documented in the Tamarin project http://hg.mozilla.org/tamarin-central/index.cgi/file/e774dfe22b39/extensions/Trace.as) by default ---- import flash.trace.Trace Trace.setLevel( Trace.METHODS_AND_LINES_WITH_ARGS, Trace.OFF ); ---- with your own function listener ---- public function traceListener( line:String, index:int, method:Sring, args:String ):void { trace( "@"+index + " - " + line ); trace( method+"("+args+")" ); } import flash.trace.Trace Trace.setListener( traceListener ); Trace.setLevel( Trace.METHODS_AND_LINES_WITH_ARGS, Trace.LISTENER ); ---- enjoy :) zwetan