【问题标题】:Does a Tool for Automatically Visualizing a Project's Source Code's Control Flow In-Line Exist?是否存在用于自动可视化项目源代码的内联控制流的工具?
【发布时间】:2015-06-02 03:24:11
【问题描述】:

     我希望能够使用一种工具,让您在源代码的上下文中可视化程序的控制流。澄清一下,这样的工具基本上应该通过以multidigraph 的形式吐出一个人类可读的抽象语法树来显示程序中发生的事情,其中​​的节点包含源代码翻译单元的 sn-ps。我认为,生成的图形初始节点将包含以程序入口点开头的代码块(对于 C 或 C++ 程序,该代码块为 main。)当节点需要引用另一个块时,将创建新节点代码,无论是在当前文件中还是在另一个文件中,箭头将连接节点。这样的工具是否存在,还是必须从头开始创建?

【问题讨论】:

    标签: static-analysis documentation-generation code-documentation code-visualization


    【解决方案1】:

    您不会获得现成的针对任意语言执行此操作的工具。有太多的语言,每一种都有自己的语法和语义。您以某种方式需要每种语言的工具。您可能会发现此类工具适用于非常常用的语言,例如 Understand for Software

    我认为做到这一点的唯一方法是构建元工具,以便相对轻松地构建特定于语言的工具。这样的工具必须具有所有此类语言处理工具所需的通用机制:强大的解析器(因此为语言编写语法相对简单)、AST 构造机制、符号表支持、构建控制和数据流图的例程。通过提供这样的机制,人们可以以适中的成本构建语言前端。

    有一类工具可以做到这一点,program transformation。他们中的大多数都有解析引擎,但没有我上面建议的其他机制。

    我相信这足以让我花费 20 年的时间来建造 这样的元工具。我们的DMS Software Reengineering toolkit 展示了它在解析一些50+ languages 方面的实力,包括惊人的难 C++14(MS 和 GNU 变体)。它显示了对 COBOL、Java、C、C++ 的符号表支持和 control flow graph construction。 (我们不能一次做所有事情;尽可能快地踩踏板)。 [DMS 将这些图表构建为数据结构,而不是“显示”它们;该页面上的示例是在 DOT 的额外帮助下绘制的]。

    尝试这样做的少数其他工具之一是Clang/LLVM;这涵盖了多种流行语言。据我所知,Clang 没有任何特定的解析支持。您可以自己编写代码。我认为只有在将语言转换为 LLVM 后才能获得控制流图。我也不认为它对绘制控制流图有任何特定的支持。

    在该领域以多语言支持而享有盛誉的旧工具是CoCo/R; 我对此了解不多。我知道它会解析, 并且对 AST 有一些支持;我不知道它有什么作用 关于控制流分析。

    【讨论】:

    • 感谢您提供许多有用的指点!我将依次研究它们中的每一个。
    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2010-10-22
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多