自动将进入/退出功能日志添加到项目中

2024-03-25

我有一个第三方源代码,我必须对其进行调查。我想查看函数的调用顺序,但我不想浪费时间输入:

printf("Entered into %s", __FUNCTION__)

and

printf("Exited from %s", __FUNCTION__)

对于每个函数,我也不想触及任何源文件。

你有什么建议吗?是否有一个编译器标志可以自动为我执行此操作?

对评论的澄清:

  • 我将交叉编译源代码以在 ARM 上运行它。
  • 我将用 gcc 编译它。
  • 我不想分析静态代码。我想跟踪运行时。所以 doxygen 不会让我的生活变得更轻松。
  • 我有源码,可以编译。
  • 我不想使用面向方面的编程。

编辑: 我发现 gdb 提示符中的“frame”命令会打印该时间点的当前帧(或者,您可以说,函数名称)。也许,每次调用函数时都可以(使用 gdb 脚本)调用“frame”命令。你怎么认为?


除了通常的调试器和面向方面的编程技术之外,您还可以使用 gcc 注入自己的检测函数-finstrument-functions http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-finstrument_002dfunctions-2112命令行选项。你必须实施你自己的__cyg_profile_func_enter() and __cyg_profile_func_exit()函数(将它们声明为extern "C"在 C++ 中)。

它们提供了一种方法来跟踪从哪里调用了什么函数。但是,该接口使用起来有点困难,因为传递的是被调用函数的地址及其调用点,而不是函数名称。您可以记录地址,然后使用类似的方法从符号表中提取相应的名称objdump --syms http://linux.die.net/man/1/objdump or nm http://linux.die.net/man/1/nm,当然假设这些符号没有从相关的二进制文件中删除。

它可能只是更容易使用gdb。 YMMV。 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动将进入/退出功能日志添加到项目中 的相关文章

随机推荐