高中男女做那个视频网站,医药网站建设价格,东台网络推广,嘉兴市做外贸网站的简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 人生格言#xff1a; 人生… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的理解GCC的-finstrument-functions选项用法 2.GCC编译器-finstrument-functions介绍 GCC编译器的 -finstrument-functions 选项用于在函数调用和返回时插入特定的回调函数以便在程序执行期间进行函数级跟踪和探查。这个特性可以用于调试、性能分析和代码覆盖率测量等方面。当使用这个选项编译程序时编译器会在函数的入口和出口处插入指定的函数调用以便监控函数的执行过程。 具体来说当使用 -finstrument-functions 选项编译程序时编译器会在函数的入口处调用 __cyg_profile_func_enter 函数以及在函数的出口处调用 __cyg_profile_func_exit 函数。这样就可以在这两个函数中实现特定的逻辑例如记录函数的调用信息、执行时间、参数等等。 对于这两个回调函数的具体定义和实现可以根据用户的需求进行自定义。用户可以根据自己的要求来在这两个回调函数中实现特定的逻辑例如记录函数的执行时间、记录函数调用栈信息、进行性能分析等。 需要注意的是使用 -finstrument-functions 选项会给程序带来额外的开销因为每个函数的调用和返回都需要执行额外的操作。因此在生产环境中使用时需要权衡好性能损耗和获取的调试、分析信息的价值。 -finstrument-functions 选项提供了一种在函数级别对程序进行跟踪和探查的方法可以用于调试、性能分析、代码覆盖率测量等方面。
3.代码实例
#include cstdioextern C {void __cyg_profile_func_enter(void *func, void *caller) __attribute__((no_instrument_function));void __cyg_profile_func_exit(void *func, void *caller) __attribute__((no_instrument_function));
}void __cyg_profile_func_enter(void *func, void *caller) {printf(Enter function %p from %p\n, func, caller);
}void __cyg_profile_func_exit(void *func, void *caller) {printf(Exit function %p from %p\n, func, caller);
}void bar() {printf(Inside bar\n);
}void foo() {printf(Inside foo\n);bar();
}int main() {foo();return 0;
} 编译g -finstrument-functions call_stack.cpp 打印 Enter function 0x55910ba862ea from 0x7f1f993c2d90 Enter function 0x55910ba8626d from 0x55910ba86312 Inside foo Enter function 0x55910ba861f5 from 0x55910ba862a4 Inside bar Exit function 0x55910ba861f5 from 0x55910ba862a4 Exit function 0x55910ba8626d from 0x55910ba86312 Exit function 0x55910ba862ea from 0x7f1f993c2d90