Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
I want to get function's call stack of the programm with gcc option -finstrument-functions.

Typical code
C++
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;

void __cyg_profile_func_enter (void *func,  void *caller)
{    }

void __cyg_profile_func_exit (void *func, void *caller)
{    }

int main()
{
printf("Hello world");
return 0
}

Compile it with gcc -finstrument-functions test.c

run ./a.out, and all ok.

But when I did it with g++ , I got undefined reference to __cyg_profile_func_enter function. I read that it happens because _cyg functions is part of C code and if I want to use them in C++ I should use extern "C", so there is final code.
C++
extern "C"{
void __cyg_profile_func_enter (void *, void *) __attribute__((no_instrument_function));
void __cyg_profile_func_exit (void *, void *) __attribute__((no_instrument_function));
int depth = -1;

void __cyg_profile_func_enter (void *func,  void *caller)
{    }

void __cyg_profile_func_exit (void *func, void *caller)
{    }
}
int main()
{
printf("Hello world");
return 0
}

It compiles with g++ -finstrument-functions test.c, then try to execute it but got Core dumped error message. I trace dump with gdb and there was Segmentation fault in __cyg_profile_func_enter().

GCC version is 2.95.4. I also tested it on 4.4.3 and all Ok. So are there any posibilities to walk around this problem using 2.95.4 gcc?
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900