Hi Lists,

I was looking for a way to trace the name of the current function or the
calling function and I came up with a hackish bit of code.

Don't know if anyone already came up with something like this but anyway, I
thought it was pretty cool so I'd like to share it with you.
I'm still working on making it more general, and you should not use it in a
production enviroment (unless the compiler directive is set to false)

package nl.trimm.lang
{

 /**
  * @author JC Wichman
  */
 public class DebugUtil
 {

  public static function getCallingInfo(pInfo:String = "", pFull:Boolean =
false):String {
   return getInfo (pInfo, pFull, 2);
  }
  public static function traceCallingInfo(pInfo:String = "", pFull:Boolean =
false):void {
   trace (getCallingInfo (pInfo, pFull));
  }
  public static function getCallerInfo(pInfo:String = "", pFull:Boolean =
false):String {
   return getInfo(pInfo, pFull, 3)
  }
  public static function traceCallerInfo(pInfo:String = "", pFull:Boolean =
false):void {
   trace (getCallerInfo (pInfo, pFull));
  }

  private static function getInfo (pInfo:String = "", pFull:Boolean = false,
pIndex:Number = 0):String {
   CONFIG::EXTENDED_INFO_ON {
    try {
     throw new Error();
    } catch (e:Error) {
     var lTrace:String = e.getStackTrace().split("\tat ")[pIndex+1];
     lTrace = pFull?lTrace:lTrace.split("[")[0];
     return (lTrace + "->" + pInfo);
    }
   }
   return pInfo;
  }
 }

}

Usage:
- define a compiler directive and set it to true or false (can be optimized)

Example:
 public class Test extends Sprite
 {

  public function Test():void
  {
     init();
  }

  private function init():void
  {
    trace (DebugUtil.getCallerInfo("here", true));
    trace (DebugUtil.getCallingInfo("here", true));
  }

 }

Prints:

Test()[D:\MY_DATA\checkouts\co_as3_library\\src\Test.as:21]->here

Test/init()[D:\MY_DATA\checkouts\co_as3_library\src\Test.as:42]->here

If you use DebugUtil.getCallingInfo("here", false) the source line is
omited.

In the next version that will be a global flag as well.

I'm not sure what happens in other languages, you might need to replace \tat
with \t

Have fun!

JC
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to