【问题标题】:c++: generate function call treec++:生成函数调用树
【发布时间】:2023-03-11 17:20:01
【问题描述】:

我想解析项目中当前的 c++ 文件并列出其中的所有方法/函数,然后生成函数调用和调用程序树。 F.g.您可以参考 doxygen 如何生成调用树。

我检查了 gccxml,但它没有列出从另一个函数调用的函数。

请推荐一些我可以使用的轻量级工具(开源)。

谢谢!

【问题讨论】:

  • 您要解决的问题是HARD。 C++ 是一种很难解析的语言。

标签: c++ gcc doxygen slickedit


【解决方案1】:

静态调用树不一定是运行时调用树。回调和虚函数使水变得浑浊。所以静态分析只能给你部分答案。

我能够获得可靠调用树的唯一方法是在已编译的可执行文件上运行 gprof。输出可以被按摩成一个非常准确的调用树。

【讨论】:

    【解决方案2】:

    gccxml 目前基本上忽略了函数体(包括对其他函数的调用)。 here 是对当前可用的 C++ 解析选项的一个很好的概述——不一定是好消息的承载者,但推荐阅读。

    【讨论】:

      【解决方案3】:

      你提到了 Doxygen。为什么不使用它?

      【讨论】:

        【解决方案4】:

        我可能误解了,但视觉工作室有类似的东西。 右键单击一个函数并选择调用浏览器。

        【讨论】:

          【解决方案5】:

          不可能为依赖于异步事件接收的应用程序提供完整的调用树分析。这是我们进行测试的方式。即使在应用程序完全确定性的最简单情况下,这也可能是一项相对艰巨的任务,我认为提供边际价值。那么你会如何分析结果呢?起到什么作用?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多