【问题标题】:How to omit built-in functions from call graph如何从调用图中省略内置函数
【发布时间】:2013-04-02 03:09:58
【问题描述】:

我使用 gcc 生成了我的 C/C++ 程序的调用图,但是该图包含许多我不感兴趣的内置函数,例如 strcmp、fprintf 等。是否有任何 gcc 选项可以帮助省略那些功能?我知道埃及有一个选项 --omit,但这需要用户指定他们事先知道的函数列表。这意味着如果我想删除上面的所有内置函数,我需要有一个完整的函数列表,我不确定从哪里获得。

谢谢。

【问题讨论】:

    标签: c++ c gcc call-graph


    【解决方案1】:

    标准库函数的完整列表可以在语言标准中找到。但是,该列表不包括帮助程序、特定于编译器的函数。

    例如,参见 1999 年 C 标准的 Annex B/Library summary

    如果您没有标准,请在线获取其草案。

    【讨论】:

      【解决方案2】:

      您可以自己指定检测功能。有关如何操作的更多信息,请参阅this link。 实现 intrumentation 函数,可以让你指定一个函数,在每个函数调用之前调用,它会传递被调用函数的地址和调用它的地址。

      之后,您可以使用addr2line 工具从检测运行转换地址。这使您可以提取函数并过滤它们。您需要自己解析文本文件并构建调用图,但 dot 语言很容易上手。

      【讨论】:

      • 谢谢@Morten Jensen。我正在考虑那个解决方案,但只是想知道 gcc 是否有一个轻量级的即用型解决方案。例如,像 -fno-standard-funions 这样的 gcc 选项
      • @user2197352 是的,要得到你想要的东西真的很遥远:S .. GCC 给你什么样的输出? .dot 文件还是?
      • 是的,它是一个 .dot 文件。我知道我可以从 .dot 文件中“grep”和“删除”与这些函数相关的记录。然而,这也需要一个预定义的黑名单,正如我在原帖中提到的那样。我只是认为 gcc 可能有这种选择。现在看来,黑名单解决方案是唯一的选择。
      • @user2197352 我不知道任何其他解决方案 :( 尝试谷歌搜索和浏览 gcc 手册,但我找不到似乎可以做到这一点的标志..
      猜你喜欢
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2020-10-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      相关资源
      最近更新 更多