-finstrument-functions范例

  • Post author:
  • Post category:其他


今天,我们要解释的参数是:-finstrument-functions

其详细的用法:gcc -finstrument-functions hello.c -o hello

其作用是,在每次进入函数的时候都调用:__cyg_profile_func_enter

在函数return之前,调用__cyg_profile_func_exit

而这两个函数需要用户在使用此参数前提前定义

下面举例说明之:

#include “stdio.h“

#define DUMP(func, call) \

printf(“%s: func = %p, called by = %p\n“, __FUNCTION__, func, call)

void __attribute__((__no_instrument_function__))

__cyg_profile_func_enter(void *this_func, void *call_site)

{


DUMP(this_func, call_site);

}

void __attribute__((__no_instrument_function__))

__cyg_profile_func_exit(void *this_func, void *call_site)

{


DUMP(this_func, call_site);

}

int cc(int c)

{


return c+c;

}

int bb(int b)

{


return b*b;

}

int aa(int a)

{


return a+1;

}

main()

{


printf(“The %d \n“, aa(bb(cc(2))));

}

使用该参数编译后的运行结果为:__cyg_profile_func_enter: func = 0×80485c3, called by = 0×481e23

__cyg_profile_func_enter: func = 0×8048510, called by = 0×8048600

__cyg_profile_func_exit: func […]