如何可视化包含/指向彼此的C结构图?

时间:2010-10-13 08:30:50

标签: c linux struct visualization

我正在使用Ubuntu 10.04,并研究内核对象的编程。

我遇到了一些相当复杂的结构,我很难阅读,所以我想我会尝试找一些可以帮助我想象它们的工具。

到目前为止我唯一能找到的是VCG,它有一个C Struct Visualization Example,如下所示:

看起来像我想要使用的东西。

首先,为Ubuntu打包的最后一个VCG是vcg (1.30debian-6) in hardy - 但.deb包可以在Ubuntu Lucid中下载和安装而不会出现问题。

但是,这个软件包似乎只是一个VCG 查看器(类似于vcgviewer,我猜)。 vcgviewer页面注明:

To generate compiler graph data with newest gcc compilers use:
gcc -g -da -dv -fdump-tree-original-raw -fdump-tree-all-all 

因此,显然我必须在编译时使用这些开关和gcc来生成来自C源的.vcg图形文件。

然而,问题是我正在构建一个内核模块,它只引用Linux头文件 - 因为我尽量避免重新编译整个内核。看来,一旦我尝试在该上下文中使用-fdump-tree-...开关(内核模块),gcc也想开始编译内核的其余部分! (并且在编译和生成.vcg图表时显然都失败了 - 因为我没有内核源代码,只有标题

所以我的问题是 - 是否有一个工具,可以生成.vcg或.dot结构图 - 只需使用纯文本头文件作为输入? (它不必解析所有依赖项 - 只需在同一目录中的头文件中

编辑:对我来说,后端特别是.vcg或.dot对我来说实际上并不重要,我之所以提到它们只是因为我找到它们到目前为止;任何类型的软件都允许类似的结构可视化,无论后端如何,都是受欢迎的:)

PS:请注意,如果您不想使用VCG查看器查看.vcg图表,则可以将.vcg格式转换为.dot格式,并使用graphviz代替可视化。对我有用的是perl用于libgraph-easy-perl - 首先在Ubuntu中使用Maverick版本打包,为graph-easy - search.cpan.org但是,.deb文件可以 - 再次 - 是在Lucid下载和安装没有问题)。 graph-easy安装graph-easy test.vcg --as_dot | dot -Tpng -o test.vcg.png 脚本,然后允许执行以下操作:

{{1}}

另请参阅“libgraph-easy-perl”和“[graphviz-interest] VCG files”了解另一个vcg-to-dot脚本(,遗憾的是,这对我不起作用)。

2 个答案:

答案 0 :(得分:5)

我在使用doxygen完成该任务方面有很好的经验。它旨在从带注释的源文件中创建文档,但它可以在没有注释的情况下为您提供很多内容,包括各种图形。 Doxygen使用点来创建图表。

答案 1 :(得分:2)

通过执行以下操作,我成功地使用vcg生成了一个内核模块:

  1. 使用cp -al /usr/src/linux-srcdir /tmp/tmp-srcdir创建内核源代码或头文件目录的链接副本,因为gcc想要写入当前工作目录。
  2. EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all"添加到make命令行,例如。 -C /tmp/tmp-srcdir M= {PWD {1}}。 EXTRA_CFLAGS="-g -da -dv -fdump-tree-original-raw -fdump-tree-all-all"
  3. 生成vcg个文件