意思是:面条式代码可视化软件?

26
一堆混乱的全局变量、结构类型和函数调用构成了这段C代码,现在我需要理解它(以便重构/重新实现)。我希望能绘制出以下信息的代码图:
- 调用图
- 哪些结构类型在哪些函数中使用
- 哪个全局变量在哪个函数中使用
希望这样可以更容易地识别连接组件,并将其提取到单独的模块中。我尝试了以下类似的软件:
- ncc
- ctags
- codeviz / gengraph
- doxygen
- egypt
- cflow
编辑2:
- frama-c
- snavigator
- Understand
但这些软件存在以下缺点:
a)需要我能够编译代码。我的代码无法编译,因为部分源代码丢失。
b)存在预处理器宏问题(例如cflow,想要执行#if语句的两个分支)。通过cpp运行会弄乱行号。
c)由于某种原因,我无法让软件做我想做的事情(例如doxygen;生成调用图的文档不易找到,而且由于它似乎不绘制变量/数据类型,因此可能不值得花更多时间学习doxygen的配置选项)。编辑:我确实遵循了这些Doxygen指令,但它只绘制了头文件依赖关系。

我使用Linux系统,所以如果软件适用于Linux系统且是免费软件,那将是一个巨大的优势。不确定我的老板是否理解购买可视化工具的必要性 :-(

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

//T


1
"通过cpp运行它会搞乱行号。" — 你可能会对Coan感兴趣(参见这个答案 - detly
1
coan确实可以帮助简化预处理器混乱的情况。谢谢! - The Apa
4个回答

6
我支持gnu global。它具有ctags/cscope的所有功能,还可以生成完全索引的HTML,允许您在喜欢的浏览器中浏览代码。在apache中启动它,您就拥有了一个任何人都可以访问的Web服务,包括完整的搜索功能。
它与emacs/vim/bash-shell很好地集成,您甚至可以直接从shell提示符中使用它。
要在linux内核上看到它的实际效果,请访问this 将其与cyclomatic复杂度工具eclipse插件结合使用,该工具计算代码的复杂度。除了圆形复杂度外,它还可以处理:
  • McCabe的圆形复杂度
  • 出口耦合
  • 方法内的连贯性不足
  • 方法中的代码行数
  • 字段数量
  • 级别数量
  • 范围内的本地变量数量
  • 参数数量
  • 语句数量
  • 每个类的加权方法

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


GNU global似乎是ctags的超集,并且具有cscope的许多功能。但是,我仍在努力弄清楚如何显示使用某个结构体或typedef的函数? - The Apa
如果Eclipse直接支持GNU Global,那就太好了。 - Craig McQueen

3
如果您喜欢命令行,可以尝试cscope,它可以对代码进行静态分析,并告诉您某些符号/变量/函数的引用位置...虽然不是完美的解决方案,但在浏览未知源代码时非常有用。
另外,还有一些GUI可以处理csope结果(Vi、Emacs、JEdit等)。
另一方面,Eclipse with the CDT plugin也可以帮助您浏览需要维护的混乱代码。

+1 for Eclipse,虽然如果代码无法编译,您可能需要手动添加一些头文件进行索引。 - haggai_e

0

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接