通过clang++的-finstrument-functions插入C++函数时,如果想要忽略内部std库调用,可以使用以下方法:
__attribute__((no_instrument_function))
属性来告诉编译器不要插入函数调用。例如:extern "C" void __cyg_profile_func_enter(void *this_fn, void *call_site) __attribute__((no_instrument_function));
extern "C" void __cyg_profile_func_exit(void *this_fn, void *call_site) __attribute__((no_instrument_function));
#define INSTRUMENT_FUNCTION __cyg_profile_func_enter
#define UNINSTRUMENT_FUNCTION __cyg_profile_func_exit
void foo() {
// 在需要忽略的函数调用前后使用宏定义
INSTRUMENT_FUNCTION(this, call_site);
// 忽略的函数调用
UNINSTRUMENT_FUNCTION(this, call_site);
}
需要注意的是,以上方法适用于通过-finstrument-functions
插入函数调用的情况,对于其他插桩方式可能需要使用不同的方法来忽略内部std库调用。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云