代码之家  ›  专栏  ›  技术社区  ›  sdaau

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

  •  17
  • sdaau  · 技术社区  · 14 年前

    我正在使用Ubuntu10.04,研究内核对象的编程。

    我遇到了一些相当复杂的结构,我阅读起来有困难,所以我想我应该试着找到一些工具来帮助我可视化它们。

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

    看起来像是我想用的东西。

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

    然而,这个包裹似乎只是一个录像机 观众 (类似于 vcgviewer 我想)。这个 VCG查看器 页面注释:

    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-... 在该上下文(内核模块)中切换, 海湾合作委员会 还想开始编译内核的其余部分!( 显然,在编译和生成.vcg图时都失败了-因为我没有内核源代码,只有头文件 )

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

    编辑:对我来说,后端是.vcg或.dot并不重要,特别是我提到它们只是因为我到目前为止已经找到了它们;任何允许类似结构可视化的软件,不管后端是什么,都是受欢迎的:)

    PS:请注意,如果不想使用VCG查看器查看.vcg图形,可以将.vcg格式转换为.dot格式,然后使用 graphviz 而不是视觉化。对我有用的是 graph-easy - search.cpan.org 对于 perl -它第一次在Ubuntu和Maverick版本中打包,作为 libgraph-easy-perl ( 然而,.deb文件可以再次下载和安装,而不会在lucid中出现问题。 )。 libgraph-easy-perl 安装 graph-easy 脚本,然后允许执行以下操作:

    graph-easy test.vcg --as_dot | dot -Tpng -o test.vcg.png 
    

    另请参见“ [graphviz-interest] VCG files “和” Diego Novillo - Re: can't find VCG viewer “对于另一个VCG到点脚本( 不幸的是,这对我不起作用 )。

    2 回复  |  直到 6 年前
        1
  •  5
  •   albert    6 年前

    我有很好的使用经验 doxygen 为了那个任务。它的设计目的是从带注释的源文件中创建文档,但是它可以在没有注释的情况下为您提供很多东西,包括各种图形。 doxygen使用点创建图形。

        2
  •  2
  •   Hasturkun    14 年前

    我通过执行以下操作成功地构建了一个具有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= 随钻测井 extra cflags=“-g-da-dv-fdump tree original raw-fdump tree all” . 这个 vcg 文件生成于 /tmp/tmp-srcdir