【发布时间】: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