【问题标题】:How to generate program dependence graph for C program?如何为 C 程序生成程序依赖图?
【发布时间】:2011-10-26 15:04:07
【问题描述】:

我想从 C 源代码生成程序依赖图 (PDG)。我找到了解释如何做到这一点的论文,但都使用了商业 CodeSurfer 工具。

有没有免费的工具可以做到这一点?

【问题讨论】:

  • 如果您想为 C 程序计算 PDG,为什么要标记您的问题 C++?将 C++ 程序分析到可以分析 C 程序的相同深度要困难得多。
  • 嗨,你找到一个像样的PDG“发电机”了吗? Frama-c 生成的 PDG 产生了一个非常诡异的图...

标签: c graph static-analysis


【解决方案1】:

Frama-C 是一个开源静态分析框架,可以为 C 程序计算 sound 程序依赖图。它的slicing plug-in 使用生成的PDG。切片和 PDG 计算在邮件列表的February 2010 中进行了讨论(来自 jung、myung-jin 的消息及其答案)。

您还可以查看 NIST 的 Unravel 或佐治亚理工学院的 Aristotle。卡尔斯鲁厄大学的 Valsoft 和 Loyola 的 Surgeon's Assistant 可能也值得研究。

【讨论】:

    【解决方案2】:

    有一个很有前途的新工具叫做cpp-depenencies

    它可以生成component 依赖关系图(如下所示)以及class 层次结构图(通过传递将每个源文件视为一个组件的选项)。

    【讨论】:

      【解决方案3】:

      Doxygen 可以生成函数调用者和被调用者图,以及程序中使用的所有函数。这可能不是您正在寻找的内容,但它可以提供一些有用的数据。

      SourceMonitor 是一个度量工具,可以显示功能和程序的复杂性以及复杂性图表。

      这两个工具都是免费的。

      【讨论】:

      • “程序依赖图”是一个图,其节点是语句,其边表示依赖关系。它不是调用图(其节点是函数)。您可以在此处看到 PDG 的示例,但是在处理真正的编程语言,尤其是 C 语言时,魔鬼在细节中,并且在表示中显示出来。 lists.gforge.inria.fr/pipermail/frama-c-discuss/attachments/…
      【解决方案4】:

      如果你使用llvm生成pdg,你可以这样使用: https://bitbucket.org/psu_soslab/program-dependence-graph-in-llvm/src/master/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-19
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多