Spaghetti代码可视化软件?

时间:2011-07-26 06:57:36

标签: c linux visualization code-analysis

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

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

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

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

为了类似的目的,我尝试了以下软件:
- ncc
- ctags
- codeviz / gengraph
- doxygen
- 埃及
- cflow
EDIT2:
- frama-c
- snavigator
- 了解

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

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

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

//Ť

4 个答案:

答案 0 :(得分:6)

我的投票是gnu global。它具有ctags / cscope的所有功能,并且可以生成完全索引的html,允许您在自己喜欢的浏览器中浏览代码。在apache中启动它,你就拥有了一个任何人都可以访问的网络服务,包括完整的搜索功能。

它很好地集成到emacs / vim /甚至是bash-shell中,你可以直接从shell提示符中使用它。

要在Linux内核上查看它,请访问this

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

  • McCabe的Cyclomatic Complexity
  • Efferent Couplings
  • 方法缺乏凝聚力
  • 方法中的代码行
  • 字段数
  • 级别数
  • 范围内的当地人数
  • 参数数量
  • 报表数
  • 每班加权方法

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如果您想知道声明或引用符号的功能,可以尝试LXR。它不是基于控制台的,但非常实用。