c – 如何在代码库中查找未引用的类
我们正处于开发阶段,其中有很多代码可能是短暂存在的,因为它实际上是脚手架,在某些时候被其他东西取代,但往往会继续存在并被遗忘.
是否有任何好的技术可以在代码库中查找未使用的类?显然会有很多误报(例如库类:你可能没有使用所有的标准容器,但你想知道它们在那里),但如果它们按目录列出,那么它可能会更容易看到它一目了然. 我可以为所有类编写一个greps脚本然后再次搜索所有实例,但是必须省略定义类的方法的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |