我们正处于开发阶段,其中创建了许多可能短暂存在的代码,因为它实际上是脚手架,在某些时候会被其他东西取代,但通常会继续存在并成为忘记了。
是否有任何好的技术可以在代码库中找到未使用的类?显然会有很多误报(例如库类:你可能没有使用所有标准容器,但你想知道它们在那里),但如果它们按目录列出,那么它可能更容易看到一瞥。
我可以编写一个脚本,对所有 class XXX
进行 grep,然后再次搜索所有实例,但必须忽略定义该类方法的 cpp 文件的结果。这也令人难以置信慢 - O(N^2) 代码库中类的数量
代码覆盖工具在这里并不是一个真正的选择,因为它有一个 GUI,不能以编程方式轻松调用所有功能。
平台是 Visual Studio 2013 或 Xcode/clang
编辑:我认为这不是死代码问题的重复。尽管存在重叠,但识别死代码或无法访问的代码与查找未引用的类并不完全相同。
最佳答案
如果您使用的是 Linux,则可以使用 g++
来帮助您。
我假设只有当类的一个实例被创建时,我们才会认为它被使用。因此,与其只查找类的名称,不如查找对构造函数的调用。
struct A
{
A () { }
};
struct B
{
B () { }
};
struct C
{
C () { }
};
void bar ()
{
C c;
}
int main ()
{
B b;
}
至少在 linux 上,在二进制文件上运行 nm
具有以下损坏的名称:
00000000004005bc T _Z3barv
00000000004005ee W _ZN1BC1Ev
00000000004005ee W _ZN1BC2Ev
00000000004005f8 W _ZN1CC1Ev
00000000004005f8 W _ZN1CC2Ev
我们可以立即知道没有调用“A”的构造函数。
使用来自 SO answer 的信息稍作修改我们还可以获取 g++
来删除未使用的函数调用图:
结果是:
00000000004005ba W _ZN1BC1Ev
00000000004005ba W _ZN1BC2Ev
因此,至少在 Linux 上,您可以看出最终的可执行文件中既不需要 A 也不需要 C。
关于c++ - 如何在代码库中查找未引用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158251/