【问题标题】:Spaghetti code visualisation software?意大利面条代码可视化软件?
【发布时间】:2011-10-13 04:09:16
【问题描述】:

一堆冒烟的意大利面刚刚落在我的桌子上,我的任务是理解它(这样我就可以重构/重新实现它)。

代码是 C,还有一堆全局变量、结构类型和函数调用。

我想用信息绘制代码图:
- 调用图
- 在哪些函数中使用了哪些结构类型
- 哪个全局变量用在什么函数中

希望这样可以更轻松地识别连接的组件,并将它们提取到单独的模块中。

我出于类似目的尝试了以下软件:
- ncc
- ctags
- codeviz / gengraph
- 氧气
- 埃及
- cflow
编辑2:
-frama-c
- 航海家
- 了解

这些的缺点要么是
a) 要求我能够编译代码。我的代码无法编译,因为缺少部分源代码。
b) 预处理器宏的问题(如 cflow,想要执行 #if 语句的两个分支)。通过 cpp 运行它会弄乱行号。
c)由于某种原因,我没有设法让软件做我想做的事情(比如 doxygen;调用图生成的文档不容易找到,因为它似乎无论如何都没有绘制变量/数据类型,可能不值得花更多时间学习 doxygen 的配置选项)。编辑:我确实关注了a these Doxygen instrcutions,但它只绘制了头文件依赖关系。

我在 Linux 上,所以如果该软件适用于 linux 和免费软件,那么它是一个巨大。不确定我的老板是否理解购买可视化器的必要性:-(

例如:一个命令行工具可以列出在哪些函数中引用了符号(=函数、变量、类型),这将有很大帮助(如 addr2line,但用于类型/变量名称/函数和源代码)。

//T

【问题讨论】:

  • “通过 cpp 运行它会弄乱行号。” — 你可能对Coan 感兴趣(参见this answer
  • coan 确实有助于简化预处理器的混乱。谢谢!

标签: c linux visualization code-analysis


【解决方案1】:

我的投票给gnu global。它结合了 ctags/cscope 的所有功能以及生成完全索引 html 的可能性,使您可以在您喜欢的浏览器中浏览代码。在 apache 中启动它,你就有了一个任何人都可以访问的网络服务,包括完整的搜索功能。

它很好地集成到 emacs/vim/甚至 bash-shell 中,您可以直接在 shell-prompt 中使用它。

要查看它在 linux 内核上的运行情况,请访问 this

将其与用于计算代码复杂度的圈复杂度工具plugin for eclipse 结合使用。除了它可以处理的圈复杂度:

  • McCabe 的圈复杂度
  • 传出联轴器
  • 方法缺乏凝聚力
  • 方法中的代码行数
  • 字段数
  • 层数
  • 范围内的本地人数
  • 参数数量
  • 语句数
  • 每个类的加权方法

...你应该拥有你需要的一切。

【讨论】:

  • GNU global 似乎是 ctags 的超集,并且具有 cscope 的许多功能。但是,我仍在试图弄清楚如何显示使用某个结构或 typedef 的函数?
【解决方案2】:

如果您想知道在哪些函数中声明或引用了符号,您可以试试LXR。它不是基于控制台的,但非常有用。

【讨论】:

    【解决方案3】:

    它不是免费的,afaik 不是 linux,但 cppDepend 可能值得评估 - 至少在有人提出更合适的建议之前:)

    http://www.cppdepend.com/ [Demo video here]

    【讨论】:

      【解决方案4】:

      如果你喜欢命令行 ;) 也许你可以试试cscope,它会对代码进行静态分析,并可以告诉你在哪里引用了一些符号/变量/函数...不是圣杯,但它可以很漂亮对浏览未知源代码很有用。

      还有一些 GUI 可以处理 csope 结果(Vi、Emacs、JEdit...)。

      另一方面,Eclipse with the CDT plugin 还可以帮助您导航到您必须维护的意大利面条代码。

      【讨论】:

      • +1 for eclipse,虽然如果代码不能编译,你可能需要添加一些头文件来手动索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多