为了很好的理解nginx ,看了-finstrument-function的使用,主要参考了资料
http://www.ibm.com/developerworks/cn/linux/l-graphvis/
http://blogold.chinaunix.net/u/26524/showart_2255799.html
http://hi.baidu.com/ghxandsky/blog/item/f247ba2bb317cbf3e6cd401d.html
测试代码如下
#include <stdio.h>
#define DUMP(func, call) fprintf(fp,"%s: func = %p, called by = %p\n", __FUNCTION__, func, call)
/* Constructor and Destructor Prototypes */
#if 1
void main_constructor( void )
__attribute__ ((no_instrument_function, constructor));
void main_destructor( void )
__attribute__ ((no_instrument_function, destructor));
/* Output trace file pointer */
static FILE *fp;
void main_constructor( void )
{
fp = fopen( "trace.txt", "w" );
if (fp == NULL) exit(-1);
}
void main_deconstructor( void )
{
fclose( fp );
}
#endif
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);
}
main()
{
puts("Hello World!\n");
return 0;
}
编译方法:gcc -finstrument-functions test.c -o hello