Linux 中 C++ 的类层次结构/依赖关系图生成器
Posted
技术标签:
【中文标题】Linux 中 C++ 的类层次结构/依赖关系图生成器【英文标题】:Class hierarchy/dependency diagram generator for C++ in Linux 【发布时间】:2011-12-14 17:50:17 【问题描述】:是否有一些工具可以通过检查 Linux 中的 C++ 代码来生成类层次结构/依赖关系图?
我收到了一大堆 C++ 文件,而这样的工具对我的帮助将是无价的 理解源代码。我在理解它时有点纠结。
【问题讨论】:
【参考方案1】:试试doxygen。它也可能随您的发行版一起提供。
您可能需要GraphViz 来生成图表。有a simple example和output。
这是doxygen生成的图例文件中的一个更复杂的例子:
代码(注意:如果您只想生成图形,则不需要 cmets。):
/*! Invisible class because of truncation */
class Invisible ;
/*! Truncated class, inheritance relation is hidden */
class Truncated : public Invisible ;
/* Class not documented with doxygen comments */
class Undocumented ;
/*! Class that is inherited using public inheritance */
class PublicBase : public Truncated ;
/*! A template class */
template<class T> class Templ ;
/*! Class that is inherited using protected inheritance */
class ProtectedBase ;
/*! Class that is inherited using private inheritance */
class PrivateBase ;
/*! Class that is used by the Inherited class */
class Used ;
/*! Super class that inherits a number of other classes */
class Inherited : public PublicBase,
protected ProtectedBase,
private PrivateBase,
public Undocumented,
public Templ<int>
private:
Used *m_usedClass;
;
结果:
您不需要评论您的代码来生成这些图表。第一个示例根本没有 cmets。第二个示例有一个没有 doxygen 样式注释的类。只需设置适当的参数(至少应该设置EXTRACT_ALL = YES
。我不记得是否只需要这些)。
【讨论】:
难道 doxygen 不要求您以特定格式进行评论,以便以后可以生成任何东西吗?我认为OP要求的是一个可以通过分析代码来绘制类层次图的工具 @ArmenTsirunyan 评论不需要 DoxyGen 工作。它甚至可以用于根本没有评论的项目。您只需要设置适当的参数。 @fefe: 它甚至可以用在一个完全没有评论的项目上。 呵呵,我以为它主要用在有根本没有 cmets,所以懒惰的开发人员会说:看,我们有代码的文档! @fefe 谢谢。这正是我一直在寻找的。该系统看起来非常强大。作为旁注,对于查看此线程的其他人,我发现了一个名为 doxywizard 的 doxygen 的 GUI 前端,它非常易于使用。它可以从 Ubuntu 存储库下载。【参考方案2】:有一个很有前途的新工具叫做cpp-depenencies
。
它可以生成component
依赖关系图(如下所示)以及class
层次结构图(通过传递将每个源文件视为组件的选项)。
还有cpp_dependency_graph
,它能够生成dot
、d3.js
或JSON格式的组件/包含依赖图。
以下是d3.js
可视化示例。
免责声明 - 我是cpp_dependency_graph
的作者。
【讨论】:
cpp_dependency 是个废话。它甚至不能单独解析文件夹中的单个 cpp 文件。当作者也要求提供继承图时,您为什么要提出依赖工具?您的工具无法构建所要求内容的 0.1%。【参考方案3】:如果你使用 Eclipse 作为 IDE,你可以使用类型层次来查看类层次。
【讨论】:
【参考方案4】:如果你使用kdevelop,你可以安装kdevcontrolflowgraphview plugin。
【讨论】:
【参考方案5】:Source Trail 是一个易于使用的工具,根据我的经验,它具有直观的 GUI,可帮助您探索语言元素与其相关的其他元素之间的关系。它在 MacOS 上对我来说效果很好。 自 2021 年 9 月起,它不再开发,但存储库仍然可用。
【讨论】:
以上是关于Linux 中 C++ 的类层次结构/依赖关系图生成器的主要内容,如果未能解决你的问题,请参考以下文章