自动生成C++代码流程图

9
我需要自动从C++代码中构建流程图,最好是每个源文件一个流程图。是否有任何工具(最好是C++/Python,并且要么开源,要么高度可配置 - 这样我就可以改变外观)可以用来创建流程图? http://www.faqs.org/patents/img/20110088010_08.png

1
我知道Enterprise Architect http://www.sparxsystems.com/enterprise_architect_user_guide/9.2/execution_analyzer/generating_sequence_diagram.html可以在你调试代码的同时后台生成序列图。一旦你完成调试,它会要求你保存生成的图表。所有你设置断点并在调试会话中实际命中的函数都包含在生成的序列图中。 - user1
EA提供的是动态分析,而不是静态分析。 - Ira Baxter
3个回答

5

clang/llvm 可以生成 graphviz dot 文件

例如:

clang -S -emit-llvm -o hello.ll hello.cpp
opt hello.ll -dot-cfg -o hello.dot

这将会输出多个.dot文件,每个文件对应hello.cpp中定义的一个函数。 您还可以生成支配图、后支配图等(请参见此处)。 在获得.dot文件之后,您可以使用dot将其转换为.png文件。 .dot文件本身仅包含图的结构,因此dot的输出可高度配置(但我并不非常熟悉它)。

1
谢谢您的建议!.dot文件确实非常适合我要完成的任务。 - Konstantin

2

谢谢您的建议。它是可配置的吗?我能改变图表的外观吗?您提到的演示中生成的图表有点奇怪... - Konstantin
不,那些是序列图。序列图或活动图适用于面向对象的代码库,而您的问题涉及C ++。如果您想要特定的流程图,则可以使用Code Rocket Designer。http://www.rapidqualitysystems.com/ - user1
1
@user1 "此域名出售:$12,495" - Michael

0

如果您不介意纯文本输出,'cflow'可以胜任这项工作。它在至少Debian的存储库中,并且可能在大多数Linux发行版中都有。


似乎cflow创建调用图,但我需要流程图(算法的工作方式)。 - Konstantin
没错。是静态分析你的源代码,所以如果你想知道你的程序在运行时实际流程,它就没有帮助了。 - JorenHeit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接