C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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.

大佬总结

以上是大佬教程为你收集整理的c – 如何在代码库中查找未引用的类全部内容,希望文章能够帮你解决c – 如何在代码库中查找未引用的类所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。