1

我正在尝试为我正在处理的代码(我没有编写它)生成一个调用树,以帮助我理解它。我希望能够手动输入每个函数及其调用的函数(作为子函数),从而构建树。但我希望它能够自动组织和定位图表,以便在每次添加内容时都不必移动所有内容而没有任何重叠。例如,下面是我想要输入的那种数据的结构,采用蹩脚的 Lispesque 格式:

( initAll //root node
  ( //root node's children - functions it calls
    ( initDisplay () ) //this child is a leaf
    ( initControlBar
       ( //initControlBar's children - functions it calls
         ( addButtons () )
         ( setUpControlBarEvents () )
       )
    )
    ( alertUserSystemReady () )
  )
)

我想它可能是一个图形工具(当然,树是图形的一个子集),但我不认为图形工具能够自动将事物放在正确的水平上。我喜欢将这些数据组织为树的原因在于它有不同的级别,这有助于我可视化正在发生的事情。

我试过 yEd 和 LucidChart,但对我来说都太手动了。由于树会变得很深,我需要一些可以自动重构树数据的东西。我也尝试了 Graphviz,但无法让它工作(我在 Windows 上,不知道安装后该怎么做)。

谷歌在树编辑器端帮助不大——它给了我像http://bioinfo.unice.fr/biodiv/Tree_editors.html这样的页面,有太多的选择。在这种情况下,我认为使用其他人的经验会更好,所以我来到了这里。

那么,有人知道任何可以让我更接近目标的工具吗?谢谢!

4

1 回答 1

3

使用dot语言在文件中表示图形,然后使用graphviz将其可视化。引擎(graphviz 提供的dot引擎之一)将按照您的描述绘制分层图。这是一个示例图表:


(来源:graphviz.org

您需要创建的文件的语法是这样的(取自用于上图的文件):

digraph unix {
    size="6,6";
    node [color=lightblue2, style=filled];
    "5th Edition" -> "6th Edition";
    "5th Edition" -> "PWB 1.0";
    "6th Edition" -> "LSX";
    "6th Edition" -> "1 BSD";
    "6th Edition" -> "Mini Unix";
    "6th Edition" -> "Wollongong";
    ...
}

对于不同类型的图,同一个文件可以传递给不同的引擎,但dot引擎是代码结构和依赖关系常用的引擎。

于 2012-03-01T12:55:10.143 回答