The*_*Apa 26 c linux visualization code-analysis
一堆意大利面条刚落在我的桌子上,我的任务是理解它(所以我可以重构/重新实现它).
代码是C,以及一堆全局变量,结构类型和函数调用.
我想用信息绘制代码
图:- 调用图
- 哪些结构类型用于哪些函数
- 哪个全局变量用于什么函数
希望这样可以更容易地识别连接的组件,并将它们提取到单独的模块中.
为了类似的目的,我尝试了以下软件:
- ncc
- ctags
- codeviz/gengraph
- doxygen
- egypt
- cflow
EDIT2:
- frama -c
- snavigator
- 了解
这些的缺点要么是
a)要求我能够编译代码.我的代码无法编译,因为缺少部分源代码.
b)预处理器宏的问题(如cflow,谁想要执行#if语句的两个分支).通过cpp运行会弄乱行号.
c)我出于某种原因无法让软件做我想做的事情(比如doxygen;调用图生成的文档不容易找到,因为它似乎无法绘制变量/数据类型,可能不值得花更多时间学习doxygen的配置选项).编辑:我确实遵循了这些Doxygen instrcutions,但它只绘制了头文件依赖项.
我在Linux上,所以如果该软件适用于Linux和免费软件,那将是一个巨大的优势.不确定我的老板是否明白需要购买可视化器:-(
例如:一个命令行工具列出了在哪些函数中引用符号(=函数,变量,类型)将会有很大的帮助(如addr2line,但对于类型/变量名称/函数和源代码).
//Ť
我投票给gnu global.它具有ctags/cscope的所有功能,并且可以生成完全索引的html,允许您在自己喜欢的浏览器中浏览代码.在apache中启动它,您就拥有了一个任何人都可以访问的Web服务,包括完整的搜索功能.
它很好地集成到emacs/vim /甚至是bash-shell中,你可以直接在shell-prompt中使用它.
要在linux内核上查看它,请访问它
将它与eclipse的圈复杂度插件工具结合起来,可以计算代码的复杂性.除了它可以处理的圈复杂度:
......你应该拥有你需要的一切.
如果您喜欢命令行;)也许您可以尝试cscope,它会对代码进行静态分析,并可以告诉您在哪里引用了一些符号/变量/函数...不是圣杯,但浏览未知源非常有用代码。
还有一些可以处理 csope 结果的 GUI(Vi、Emacs、JEdit...)。
另一方面,带有 CDT 插件的 Eclipse还可以帮助您导航到必须维护的意大利面条式代码。