[aspectc-user] tracing object creation
Olaf Spinczyk
os at aspectc.org
Wed Nov 11 12:39:40 CET 2020
Hi Darrel,
does this go into the right direction? ...
===
#include <iostream>
using namespace std;
namespace casa {
class C1 {
public:
void foo();
};
class C2 {
C1 _member;
public:
C2 (int p) {}
void bar () { cout << "in bar" << endl; C2 c2(0); C1 c1; }
};
}
int main () {
casa::C1 c1;
casa::C2 c2(42);
c2.bar();
}
aspect TraceCasaConstruction {
advice construction("casa::%") && cflow(execution("%
casa::%::%(...)")) : before () {
cout << JoinPoint::signature() << endl;
}
};
===
It can be compiled with "ag++ -k -a0 -o casa casa.cc". When you run it,
the output is ...
in bar
casa::C1::C1()
casa::C2::C2(int)
casa::C1::C1()
As you can see, the object construction triggered directly by main() is
ignored, but the object construction triggered by casa::C2::bar() is traced.
I don't know if that is a problem in your case, but the implementation
of the cflow feature is not thread safe.
It would be better to have a kind of call-site advice for object
construction, but this is not implemented, yet.
Best regards,
Olaf
Am 11.11.20 um 02:01 schrieb Darrell Schiebel:
>
> Hello,
>
> I would like to use Aspect C++ to track the construction of objects in a
> specific namespace (in this example "casa"). I want to have a message
> printed each time an object is created from one of the classes in the
> namespace.
>
> I have gone through the reference manual but I am still having trouble
> understanding how one narrows the methods down to only the constructors.
> This is what I've come up with based on an example from the reference
> manual:
>
> aspect Trace {
>
> pointcut methods() = "casa::...::;
>
> advice execution(methods()) : before() {
>
> std::cout << "executing " << JoinPoint::signature() << "(";
>
> for (unsigned i = 0; i < JoinPoint::args(); i++)
>
> printvalue(tjp->arg(i), JoinPoint::argtype(i));
>
> cout << ")" << endl;
>
> tjp->proceed();
>
> cout << "after" << endl;
>
> }
>
> };
>
>
>
> but I am sure it falls short.
>
> Thanks for any advice.
>
> Darrell
>
>
> _______________________________________________
> aspectc-user mailing list
> aspectc-user at mail.aspectc.org
> https://www.aspectc.org/cgi-bin/mailman/listinfo/aspectc-user
>
More information about the aspectc-user
mailing list