Linux之打印函数调用依赖关系(六十一)

编程入门 行业动态 更新时间:2024-10-12 01:28:42

Linux之打印<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数调用依赖关系(六十一)"/>

Linux之打印函数调用依赖关系(六十一)

简介: 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 <cstdio>extern "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

更多推荐

Linux之打印函数调用依赖关系(六十一)

本文发布于:2023-11-16 02:14:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1611545.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   关系   Linux   六十一

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!