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,它能够生成dotd3.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++ 的类层次结构/依赖关系图生成器的主要内容,如果未能解决你的问题,请参考以下文章

C ++中模板类型中的类层次结构

c++的类和结构体是啥关系

C++笔记-类层次结构

了解eclipse maven依赖层次结构

C++ 中带智能指针的依赖注入

C++:在不违反 SRP 的情况下向多态类层次结构添加方法?