【发布时间】:2014-08-01 05:38:08
【问题描述】:
我们正处于一个开发阶段,其中创建了许多可能是短暂的代码,因为它实际上是一个脚手架,在某些时候会被其他东西取代,但通常会继续存在并被忘记了。
有没有什么好的技术可以在代码库中找到未使用的类?显然会有很多误报(例如库类:您可能没有使用所有标准容器,但您想知道它们在那里),但如果它们按目录列出,那么它可能更容易在一目了然。
我可以编写一个脚本,对所有 class XXX 进行 greps,然后再次搜索所有实例,但必须省略定义类方法的 cpp 文件的结果。这也会非常慢 - O(N^ 2) 对于代码库中的类数
代码覆盖工具在这里并不是一个真正的选择,因为它的 GUI 不能以编程方式轻松调用所有功能。
平台是 Visual Studio 2013 或 Xcode/clang
编辑:我不认为这是死代码问题的重复。尽管存在重叠,但识别死代码或无法访问的代码与查找未引用的类并不完全相同。
【问题讨论】:
-
这听起来类似于死代码问题 - stackoverflow.com/questions/162551/…。这是关于 Java 的,但我怀疑有什么真正的区别。实际上,有一个 C++ 死代码问题 - 请参阅 stackoverflow.com/questions/321241/dead-code-identification-c。
-
也许,如果您可以自动创建项目的 uml 图,其中包括调用 hirachies,您可以执行目视检查并查找所有断开连接的节点。
-
@sashoalm - 有几种可能性,谢谢。
-
@MikeMB - 对于大约 500kLOC 的代码库,每次调用的任何 UML 图都将是巨大的,所以我不认为这是一个可扩展的解决方案。
-
@The_mandrill:是也不是。我不知道是否有任何工具可以生成这样的图表(Visual Studio 的代码图非常适合小型项目)。另一方面,分析这样的图表应该是可能的,原因有两个:首先,一个合适的工具无论如何都会单独显示断开的节点或集群,其次,如果你有例如访问 xml 表示,应该很容易编写一个脚本来查找没有传入边缘的所有节点。但当然,这只是我个人的猜测,因为我还没有参与过大型项目。
标签: c++ static-analysis