Lar*_*rsH 7 code-analysis include tex
我想做一些代码重构,特别是文件之间的"包含"关系.它们中有很多,要开始使用,有一个列表,图表甚至是柱状图会很有帮助,这样我就可以一目了然地看到从哪里包含的内容.
(在很多情况下,一个给定的文件是由其他多个文件包括,使图形将是一个DAG,没有一棵树.有没有循环.)
我使用TeX的(实际上上下文)的工作,但问题似乎适用于具有这样的设备的任何编程语言#include中的C.
很明显,简单的答案是做一个grep或所有相关的关键字.tex文件里"在文件中查找"( ,\usemodule,\input和几个其他的宏,我们已经定义).这比没有好,但是输出很长,而且仍然很难看到包含什么的模式.例如,文件A通常包含在文件B之前吗?文件C是否被同一个文件多次包含?
我想这会带来一个额外但可选的功能:这样的工具能够显示特定文件中的包含序列.因此,在这种情况下,DAG可以是多图,即从一个文件到另一个文件可能存在多个弧.
理想情况下,能够为每个文件添加注释会很好,并简要概述其中的内容.这将构成该文件的图形节点上的文本的一部分.
可能这种事情可以通过生成graphviz点语言的脚本来完成.但我想知道它是否已经完成,而不是重新发明轮子.
因为现在是我的国家的星期五,我正在等待同事去喝啤酒,所以我想我应该做一些编程。
在这里http://www.luki.webzdarma.cz/up/IncludeGraph.zip您可以下载一个非常简单的实用程序的源代码,该实用程序查找一个文件夹中的所有文件,解析 #includes 并为其生成一个 .dot 文件。
它支持并正确处理相对路径,可以在 Windows 上运行,也应该在 Linux 上运行。它是以非常斯巴达的方式写的。我的 dot 版本没有解析生成的文件,有一些错误,但我现在真的需要去喝酒,看看你是否可以修复它。我不是一个普通的点用户,我没有看到它,尽管我确信它是相当明显的。
享受 ...
PS - 如果您在编译和/或运行时遇到问题,请告诉我。谢谢。
编辑
好吧,我的错,Linux 上有一些小故障。点问题是它使用“graph”而不是“digraph”。但现在它就像魅力一样发挥作用。链接在这里。只需输入 make,如果成功,make test 应该生成程序本身的以下图表:

它忽略 C++ 文件中的预处理器指令,因此直接对此不是很有用(可以通过简单地使用预处理器输出标志调用 g++ 并处理它而不是实际文件来修复)。我今天没有接触到 regexp,但是如果您有任何编程经验,您会发现修改 DotGraph.cpp 应该不会很难对您的包含标记进行硬编码,并更改文件扩展名列表。明天可能会用到正则表达式什么的。