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