Pa ako compiler-specific kod ne zadovoljava -> do-it-yourself.
Vidjao sam i skupe komercijalne biblioteke koje problem reshavaju (relativno) jednostavnim makroima tipa:
void MyClass::SomeFn()
{
ENTER_METHOD(MyClass, SomeFn);
//...
END_METHOD;
}
gde makro mozhe biti komplikovan koliko ti je potrebno, od prostog:
#define ENTER_METHOD(classname, methodname)\
printf("Exec: %s :: %s", #classname, #methodname)
pa do koda (u pomenutim bibliotekama) koji pomocu makroa konstruishe call-trace (recimo makro ENTER_METHOD bi dodao jedan sub-node u stablu za call-trace, END_METHOD bi vratio za jedan nivo vishe itd. do proizvoljne dubine). Relativno je jednostavno napraviti puni call-trace ovakvim metodama.
Naravno, sve ovo funkcionishe u scope-u funkcije koja se trenutno izvrshava, i pod uslovom da strogo poshtujesh konvencije poziva funkcija, ali slichna ogranichenja ima i pomenuti __FUNCTION__ .
Mada, uvek mozhesh da zasuchesh rukave i napravish propisnu reflection podrshku u svojim baznim klasama... chini mi se da VCF (
http://vcf-online.org/) to ima korektno odradjeno, vredi pogledati, ako nishta drugo ono radi reference.
[Ovu poruku je menjao NastyBoy dana 15.06.2006. u 01:07 GMT+1]