【发布时间】:2023-03-11 17:20:01
【问题描述】:
我想解析项目中当前的 c++ 文件并列出其中的所有方法/函数,然后生成函数调用和调用程序树。 F.g.您可以参考 doxygen 如何生成调用树。
我检查了 gccxml,但它没有列出从另一个函数调用的函数。
请推荐一些我可以使用的轻量级工具(开源)。
谢谢!
【问题讨论】:
-
您要解决的问题是HARD。 C++ 是一种很难解析的语言。
我想解析项目中当前的 c++ 文件并列出其中的所有方法/函数,然后生成函数调用和调用程序树。 F.g.您可以参考 doxygen 如何生成调用树。
我检查了 gccxml,但它没有列出从另一个函数调用的函数。
请推荐一些我可以使用的轻量级工具(开源)。
谢谢!
【问题讨论】:
静态调用树不一定是运行时调用树。回调和虚函数使水变得浑浊。所以静态分析只能给你部分答案。
我能够获得可靠调用树的唯一方法是在已编译的可执行文件上运行 gprof。输出可以被按摩成一个非常准确的调用树。
【讨论】:
gccxml 目前基本上忽略了函数体(包括对其他函数的调用)。 here 是对当前可用的 C++ 解析选项的一个很好的概述——不一定是好消息的承载者,但推荐阅读。
【讨论】:
你提到了 Doxygen。为什么不使用它?
【讨论】:
我可能误解了,但视觉工作室有类似的东西。 右键单击一个函数并选择调用浏览器。
【讨论】:
不可能为依赖于异步事件接收的应用程序提供完整的调用树分析。这是我们进行测试的方式。即使在应用程序完全确定性的最简单情况下,这也可能是一项相对艰巨的任务,我认为提供边际价值。那么你会如何分析结果呢?起到什么作用?
【讨论】: