C 意大利面代码可视化软件?

C 意大利面代码可视化软件?,c,linux,visualization,code-analysis,C,Linux,Visualization,Code Analysis,一堆冒着烟的意大利面条刚刚落在我的桌子上,我的任务是理解它(这样我就可以重构/重新实现它) 代码是C,还有一堆全局变量、结构类型和函数调用 我想用以下信息绘制代码图: -调用图 -哪些结构类型用于哪些函数 -哪个全局变量用于哪个函数 希望这样可以更容易地识别连接的组件,并将它们提取到单独的模块中 出于类似目的,我尝试了以下软件: -ncc -ctags -codeviz/gengraph -强氧剂 -埃及 -cflow 编辑2: -frama-c -snavigator -理解 这些方法的缺点要

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

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

我想用以下信息绘制代码图:
-调用图
-哪些结构类型用于哪些函数
-哪个全局变量用于哪个函数

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

出于类似目的,我尝试了以下软件:
-ncc
-ctags
-codeviz/gengraph
-强氧剂
-埃及
-cflow
编辑2:
-frama-c
-snavigator
-理解

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

我在Linux上,所以如果该软件是针对Linux和自由软件的,这将是一个巨大的优势。我不确定我的老板是否理解购买可视化仪器的必要性:-(

例如:列出符号(=函数、变量、类型)在哪些函数中引用的命令行工具将非常有用(如addr2line,但对于类型/变量名称/函数和源代码)

//T

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

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


另一方面,它还可以帮助您导航到您必须维护的意大利面代码。

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


[]

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

我的投票权在。它结合了ctags/cscope的所有功能,还可以生成完全索引的html,允许您在最喜欢的浏览器中浏览代码。在apache中启动它,您就拥有了一个任何人都可以访问的web服务,包括完整的搜索功能

它很好地集成到emacs/vim/甚至bashshell中,您可以直接从shell提示符使用它

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

将其与圈复杂度工具相结合,该工具可计算代码的复杂度。除了圈复杂度外,它还可以处理:

  • McCabe圈复杂度
  • 传出耦合
  • 方法缺乏连贯性
  • 方法中的代码行
  • 字段数
  • 级别数
  • 作用域中的本地数
  • 参数数量
  • 发言数
  • 每类加权方法

…您应该拥有所需的一切。

“通过cpp运行它会弄乱行号。”-您可能对(请参阅)coan确实有助于简化预处理器的混乱。非常感谢。GNUGlobal似乎是CTAG的超集,并且具有许多cscope的功能。然而,我仍在试图弄清楚如何显示函数,比如说,在使用某个struct或typedef的地方?如果.1用于eclipse,那就太好了,尽管如果代码不编译,您可能需要添加一些头文件以手动编制索引。