在Linux中为C++生成类层次结构/依赖关系图生成器

21

有没有一些工具可以在Linux中检查C++代码并生成类层次结构/依赖关系图?

我被给予了这个庞大的C++文件集合,这样一个工具对于帮助我理解源代码将是无价之宝。我对理解它感到有些混乱。

6个回答

23

尝试使用doxygen,它可能已经随着您的发行版一起安装了。

您可能需要GraphViz来生成图形。这里有一个简单的示例输出结果

这是由doxygen生成的legend文件的更复杂的例子:

代码(注意:如果您只想生成图形,则不需要注释):

/*! 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;
};

结果:

在这里输入图像描述

不需要对代码进行注释以生成这些图表。第一个示例根本没有注释。第二个示例有一个类没有Doxygen样式的注释。只需设置适当的参数(至少应将EXTRACT_ALL = YES设置成为必要条件,我无法记得是否还需要其他设置)。


1
Doxygen不需要你按特定格式进行注释,以便它可以生成任何内容吗?我认为OP所要求的是一种工具,可以通过分析代码绘制类层次结构图。 - Armen Tsirunyan
4
DoxyGen不需要注释就可以工作,甚至可以用于没有注释的项目。您只需要设置适当的参数即可。 - fefe
1
@fefe: 它甚至可以用于没有任何注释的项目。嘿,我以为它主要用于完全没有注释的项目,这样懒惰的开发人员就可以说:看,我们有代码文档! - ninjalj
@fefe 谢谢。这正是我在寻找的东西。这个系统看起来非常强大。顺便提一下,对于其他查看此线程的人,我发现了一个名为 doxywizard 的 doxygen GUI 前端,非常易于使用。它可以从 Ubuntu 存储库中下载。 - smilingbuddha
不会生成类的依赖关系,只会显示它继承的类。在您发布的示例页面上,有一个依赖于类A的类B,但输出图像并未显示它,只显示了继承关系。 - KulaGGin

7
有一个很有前途的新工具叫做 cpp-depenencies
它可以生成组件依赖图(如下所示)以及类层次结构图(通过将每个源文件视为组件传递选项)。 enter image description here 还有一个名为 cpp_dependency_graph 的工具,能够以 dotd3.js 或 JSON 格式生成组件/包含依赖关系图。
以下是一个 d3.js 可视化示例。 enter image description here 免责声明 - 我是 cpp_dependency_graph 的作者。

cpp_dependency是垃圾。它甚至无法单独解析文件夹中的一个cpp文件。当作者要求继承图时,为什么你提出依赖工具?你的工具连被要求的0.1%都无法构建。 - hsaturn

1
如果您使用Eclipse作为IDE,您可以使用类型层次结构来查看类层次结构。

1

0

我建议你们尝试使用Source Navigator

一个适用于C/C++/Fortran/Java/Tcl/PHP/Python的集成开发环境(IDE)

Windows: https://sourcenav.sourceforge.net/

Linux(和Mac?):http://chenweixiang.github.io/2019/09/09/source-navigator-ng.html#install-source-navigator-ng-4-5-on-linuxmint

它有点过时,但长期以来一直是一个有用的工具。 已经有一段时间没有更新了(约2014年),所以在较新的C++14(+)功能中可能会出现困惑。据推测,也存在一些C++11的问题。 但对于显示相当复杂的类层次结构、包含依赖关系调查和简单的代码导航而言,它已经足够(前提是它不会在某些复杂的代码结构上崩溃)。

值得注意的是,过去还有源导航扩展 - 基本上是同样的东西,但你可以打开多个独立的窗口。

这是源代码: https://github.com/rogerz/sourcenavigator

-1

Source Trail是一个易于使用的工具,在我的使用经验中,它具有直观的图形用户界面,帮助您探索语言元素与其他相关元素之间的关系。在我的MacOS上它运行得非常好。 截至2021年9月,该工具已不再开发,但代码库仍然可用。


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