This is from the gcc manual:
-finstrument-functions
Generate instrumentation calls for
entry and exit to functions. Just
after func- tion entry and just before
function exit, the following profiling
functions will be called with the
address of the current function and
its call site. (On some platforms,
__builtin_return_address does not work beyond the current func- tion, so the
call site information may not be
available to the profiling functions
otherwise.)
void __cyg_profile_func_enter (void *this_fn, void *call_site);
void __cyg_profile_func_exit (void *this_fn, void *call_site);
Unless somthing implements those functions, you will get linker errors (which is what happens with MinGW). Conceivably, your GCC version is providing empty implementations.
I got it to work with MinGW GCC by providing this implementation:
#include <stdio.h>
void __cyg_profile_func_enter (void *this_fn, void *call_site) {
printf( "entering %p
", this_fn );
}
void __cyg_profile_func_exit (void *this_fn, void *call_site) {
printf( "leaving %p
", this_fn );
}
but this only gives the function addresses. I'd have thought there should be a GCC default implementation of this, but there doesn't seem to be.
People may also be interested in this visualisation of the call tree, which uses the -fintrument-functions flag - caveat, I haven't tried it myself.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…