我被扔进了一个包含大量源文件的大型Fortran项目。
我需要为这个项目做出贡献,我首先理解这个来源似乎是明智的。
作为第一步,我想想象各种源文件之间的相互依赖性,即哪些源文件需要哪些模块。据我所知,其他语言存在自动化方法,并产生可以使用Graphviz构建的图形。
但有人知道那些可以为Fortran 90代码执行此操作的软件吗?
[搜索Fortran帮助的互联网是一个真正的痛苦,因为你可以通过痛苦无处不在的FORTRAN 77来搜索蜘蛛网。]
答案 0 :(得分:21)
我建议doxygen,它会自动从源代码生成文档(并且是免费的)。通常,您会在描述函数和变量的注释中添加一些标记。但是,您可以在未记录的源文件上运行doxygen,前提是在配置文件中将EXTRACT_ALL
设置为YES
,并为所有函数创建创建关系图(即此函数调用这些函数和由其他函数调用。)
您需要安装GraphViz才能生成图表,并在配置文件中将HAVE_DOT
选项设置为YES
。
有关详细信息,请参阅graphs and diagrams的doxygen文档;有关生成的输出示例,请参阅此example class documentation。
编辑:当然对于Fortran,您应该在配置文件中将OPTIMIZE_FOR_FORTRAN
选项设置为YES
。
答案 1 :(得分:9)
如果你有钱,那么Understand for Fortran值得一看。如果您没有钱但打算快速工作,那么您可能会试用下载该软件。
对于静态调用图,我从来没有找到像理解那样有用的免费工具;很难找到任何免费工具,更不用说有用工具了。我自己写一个,但市场很小: - (
对于动态调用图,请调查您的编译器选项。我使用英特尔Fortran编译器,它可以生成大量有关正在执行的程序的有用信息。 TotalView调试器还可以显示正在执行的程序的调用图。您还应该查看gprof2dot,它会从GPROF调用“图形”中生成DOT文件。这是免费的,好的。
我还应该补充一点,虽然这不是我曾经使用的东西,Callgrind可能有用。
答案 2 :(得分:2)
您可以在Valgrind内使用callgrind
:
valgrind --tool=callgrind [your program]
这将生成callgrind.out.[pid]
个文件。如果您在没有优化的情况下编译程序,并使用调试标志,那么这种方法效果最佳。
然后您有几个查看数据的选项: