[aspectc-user] Weaved Join Points not Executing

Olaf Spinczyk Olaf.Spinczyk at informatik.uni-erlangen.de
Tue Nov 22 09:11:24 CET 2005


Hi Mark,

which functions are transformed properly and which functions are not? 
There are several explanations, but I have not enough information to 
tell which one is right. You can choose from:

* the implementation of the functions is located in different files.
   Not all of the files are transformed by the weaver, because of your
   Makefile/build script/etc. In this case
   the weaver would list all functions, because the declarations in
   the header files are visible. However, the function bodies would
   not be transformed.

* the problem might also related to templates. For example, ac++ does
   not transform function templates. However, in this case the functions
   should not be listed as execution join points.

* there are also problems/restrictions if types instanciated from
   templates are used in the argument list of a function if you don't
   use the --real-instances option (which is experimental).

* macros also cause trouble. AspectC++ does not transform
   macro-generated code. For historical reasons the weaver prints some
   "bad ... MANIPULATOR" message and save the translation unit *without*
   weaving at any join point. If your client code is located in a
   different translation unit, the inline functions (defined in the
   header file) would be transformed while the non-inline functions are
   unmodified.  [the next version (1.0pre2) will handle macros better]

I hope that any of the explanations is the right one.

Best regards,

Olaf

PS: Note that within("FOO") also matches all call join points within "FOO".


Mark Hennessy wrote:
> I have a simple pointcut defined to trace the execution
> of every method within a class. 
> 
> pointcut method() = within("Actions");
> 
> advice method() : before()
> 	{
> 		printf("%s\n", JoinPoint::signature ());
> 	}
> 
> When I weave the aspect and use the -v9 parameter
> passed to ac++, a list of execution Join Points are printed
> out for example:
> 
> void Actions::function_definition_1(cAsgNode *)
> 
> but when I go to test the weaved system, only a small
> selection of the Join Points actually get executed.
> If I manually insert tracing code within function_definition_1
> method, it is being executed but the weaved code
> wont print out that is has been executed.
> 
> The -v9 option says that all of the methods have been
> woven but the execution only prints out a tiny amount
> of the methods when I know they are being executed
> so what am I doing wrong?
> _______________________________________________
> aspectc-user mailing list
> aspectc-user at aspectc.org
> http://www.aspectc.org/mailman/listinfo/aspectc-user




More information about the aspectc-user mailing list