代码之家  ›  专栏  ›  技术社区  ›  EMiller

如何可视化Fortran(90或更高版本)源代码,例如使用graphviz?

  •  15
  • EMiller  · 技术社区  · 15 年前

    我被投入到一个拥有大量源文件的大型Fortran项目中。

    我需要为这个项目做出贡献,我首先理解这个来源似乎是谨慎的。

    作为第一步,我想可视化各种源文件之间的相互依赖性,即哪些源文件需要哪些模块。据我所知,其他语言存在自动方法,并生成一个可以使用graphviz构建的图。

    但是,有人知道可以为Fortran 90代码做这件事的软件吗?

    [搜索Interwebsfortran帮助是一种真正的痛苦,因为您最终会在Interwebsfortran77上搜索,这要归功于它无处不在的痛苦。]

    3 回复  |  直到 6 年前
        1
  •  9
  •   High Performance Mark    15 年前

    如果你有钱的话 Understand for Fortran 值得一看。如果你没有钱,但打算快速工作,那么你可以试着下载软件。

    对于静态调用图,我从来没有找到一个像理解一样有用的免费工具;很难找到任何免费工具,更不用说有用的工具了。我自己写一本,但市场很小:-(

    对于动态调用图,请研究编译器选项。我使用英特尔Fortran编译器,它可以生成大量关于正在执行的程序的有用信息。totalview调试器还可以可视化正在执行的程序的调用图。你也应该看看 gprof2dot 它从gprof调用“graph”中生成一个点文件。这是免费的。

    我还应该补充一点,尽管这不是我用过的东西, Callgrind 可能是有用的。

        2
  •  21
  •   albert    6 年前

    我建议你 doxygen ,它自动从源代码生成文档(并且是免费的)。通常在描述函数和变量的注释中添加一些标记。但是,只要设置了 EXTRACT_ALL YES 在配置文件中,并让它为所有函数(即,此函数调用这些函数并由这些其他函数调用)创建关系图。

    您需要安装graphviz以生成图表并 HAVE_DOT 选项设置为 在配置文件中。

    参见Doxygen文档 graphs and diagrams 更多信息和此 example class documentation 例如生成的输出。

    编辑 :当然,对于Fortran,您应该设置 OPTIMIZE_FOR_FORTRAN 选择权 在配置文件中。

        3
  •  2
  •   Mark    9 年前

    你可以使用 callgrind 从内 Valgrind :

    valgrind --tool=callgrind [your program]
    

    这将产生一个 callgrind.out.[pid] 文件。如果您在编译程序时没有进行优化,并且带有调试标志,那么这种方法最有效。

    然后,您有几个查看数据的选项:

    1. 将callgrind输出转换为.dot文件 grof2dot ,然后用 xdot 或者用graphviz将其转换为静态图。
    2. 直接查看 Kcachegrind (包括源代码分析和调用图)。