[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] generate a StackTraceElement
|
(Valerio, I can't look at your code now.)
fyi, there's a program to trace join points in the sample code
(aspectj site, documentation page, click samples, go to
entry "Trace join points executed to log"):
http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/sample-code.html#tracing-traceJoinPoints
Wes
> ------------Original Message------------
> From: Valerio Schiavoni <ervalerio@xxxxxxxxxx>
> To: aspectj-users@xxxxxxxxxxx
> Date: Thu, Feb-10-2005 1:41 PM
> Subject: Re: [aspectj-users] generate a StackTraceElement
>
> Hello Wes,
> On Thursday 10 February 2005 20:11, Wes Isberg wrote:
> > The code below works, logging all the adviceexecution
> > join points.
> i don't know why, but still can't get any output.
>
> let me try to sum up what I have now:
> a stacktraceaspect, like that:
> /--StackTracerAspect.java--/
> public aspect StackTracerAspect {
>
> before(): adviceexecution() && !within(StackTracerAspect) {
> log(thisJoinPointStaticPart);
> };
>
> void log(JoinPoint.StaticPart jp) {
> Signature sig = jp.getSignature();
> SourceLocation loc = jp.getSourceLocation();
> StackTraceElement ste = new StackTraceElement
> (sig.getDeclaringType().getName(), sig.getName(),
> loc.getFileName(), loc.getLine());
> System.out.println("BeforeAndAfter advice: "+ ste);
> }
> }
>
> Then, i have a TraceAspect, which is the taken by the tracing example
> of the
> programming guide.
> (i paste it only to be as clear as possible)
> package tracing;
>
> import java.io.PrintStream;
>
> /**
> *
> * This class provides support for printing trace messages into a
> stream.
> Trace
> * messages are printed before and after constructors and methods are
> executed.
> * The messages are appended with the string representation of the
> objects
> whose
> * constructors and methods are being traced. It defines one abstract
> pointcut
> * for injecting that tracing functionality into any application
> classes.
> *
> */
> abstract aspect TraceAspect {
>
> /*
> * Functional part
> */
>
> /**
> * There are 3 trace levels (values of TRACELEVEL): 0 - No messages
> are
> * printed 1 - Trace messages are printed, but there is no indentation
> * according to the call stack 2 - Trace messages are printed, and
> they are
> * indented according to the call stack
> */
> public static int TRACELEVEL = 0;
> protected static PrintStream stream = null;
> protected static int callDepth = 0;
>
> /**
> * Initialization.
> */
> public static void initStream(PrintStream s) {
> stream = s;
> }
>
> protected static void traceEntry(String str, Object o) {
> if (TRACELEVEL == 0) return;
> if (TRACELEVEL == 2) callDepth++;
> printEntering(str + ": " + o.toString());
> }
>
> protected static void traceExit(String str, Object o) {
> if (TRACELEVEL == 0) return;
> printExiting(str + ": " + o.toString());
> if (TRACELEVEL == 2) callDepth--;
> }
>
> private static void printEntering(String str) {
> printIndent();
> stream.println("--> " + str);
> }
>
> private static void printExiting(String str) {
> printIndent();
> stream.println("<-- " + str);
> }
>
>
> private static void printIndent() {
> for (int i = 0; i < callDepth; i++)
> stream.print(" ");
> }
>
>
> /*
> * Crosscut part
> */
>
> /**
> * Application classes - left unspecified.
> */
> abstract pointcut myClass(Object obj);
> /**
> * The constructors in those classes.
> */
> pointcut myConstructor(Object obj): myClass(obj) &&
> execution(new(..));
> /**
> * The methods of those classes.
> */
> // toString is called from within our advice, so we shouldn't
> // advise its executions. But if toString is overridden, even
> // this might not be enough, so we might want
> // && !cflow(execution(String toString()))
> pointcut myMethod(Object obj): myClass(obj) &&
> execution(* *(..)) && !execution(String toString());
>
> before(Object obj): myConstructor(obj) {
> traceEntry("" + thisJoinPointStaticPart.getSignature(), obj);
>
> }
>
> after(Object obj): myConstructor(obj) {
> traceExit("" + thisJoinPointStaticPart.getSignature(),
> obj);
>
> }
>
> before(Object obj): myMethod(obj) {
>
> traceEntry("" + thisJoinPointStaticPart.getSignature(), obj);
>
> }
> after(Object obj): myMethod(obj) {
> traceExit("" + thisJoinPointStaticPart.getSignature(), obj);
> }
>
> }
>
>
> Then, when I launch this toy application, the only output is something
> like
> that:
> --> tracing.TwoDShape(double, double): Circle radius = 0.0 @ (0.0,
> 0.0)
> <-- tracing.TwoDShape(double, double): Circle radius = 0.0 @ (3.0,
> 3.0)
> --> tracing.Circle(double, double, double): Circle radius = 0.0 @
> (3.0, 3.0)
> <-- tracing.Circle(double, double, double): Circle radius = 2.0 @
> (3.0, 3.0)
> --> tracing.TwoDShape(double, double): Circle radius = 0.0 @ (0.0,
> 0.0)
> <-- tracing.TwoDShape(double, double): Circle radius = 0.0 @ (0.0,
> 0.0)
> --> tracing.Circle(double, double, double): Circle radius = 0.0 @
> (0.0, 0.0)
> <-- tracing.Circle(double, double, double): Circle radius = 4.0 @
> (0.0, 0.0)
> --> tracing.Circle(double): Circle radius = 4.0 @ (0.0, 0.0)
> <-- tracing.Circle(double): Circle radius = 4.0 @ (0.0, 0.0)
> --> double tracing.Circle.perimeter(): Circle radius = 2.0 @ (3.0,
> 3.0)
> <-- double tracing.Circle.perimeter(): Circle radius = 2.0 @ (3.0,
> 3.0)
> c1.perimeter() = 12.566370614359172
> --> double tracing.Circle.area(): Circle radius = 2.0 @ (3.0, 3.0)
> <-- double tracing.Circle.area(): Circle radius = 2.0 @ (3.0, 3.0)
> c1.area() = 12.566370614359172
> --> double tracing.TwoDShape.distance(TwoDShape): Circle radius = 4.0
> @
> (0.0, 0.0)
> --> double tracing.TwoDShape.getX(): Circle radius = 2.0 @ (3.0,
> 3.0)
> <-- double tracing.TwoDShape.getX(): Circle radius = 2.0 @ (3.0,
> 3.0)
> --> double tracing.TwoDShape.getY(): Circle radius = 2.0 @ (3.0,
> 3.0)
> <-- double tracing.TwoDShape.getY(): Circle radius = 2.0 @ (3.0,
> 3.0)
> <-- double tracing.TwoDShape.distance(TwoDShape): Circle radius = 4.0
> @
> (0.0, 0.0)
> c2.distance(c1) = 4.242640687119285
>
> which doesn't report anything related with the join points.....
>
> where am I getting lost ?
>
> thanks
> Valerio
>
>
> > Does the variable thisEnclosingJoinPointStaticPart help?
> i read the programming guide, but i didn't understand what that
> variable is
> for.
>
> >
> > Wes
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>