加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何在代码库中查找未引用的类

发布时间:2020-12-16 07:09:02 所属栏目:百科 来源:网络整理
导读:我们正处于开发阶段,其中有很多代码可能是短暂存在的,因为它实际上是脚手架,在某些时候被其他东西取代,但往往会继续存在并被遗忘. 是否有任何好的技术可以在代码库中查找未使用的类?显然会有很多误报(例如库类:你可能没有使用所有的标准容器,但你想知道它
我们正处于开发阶段,其中有很多代码可能是短暂存在的,因为它实际上是脚手架,在某些时候被其他东西取代,但往往会继续存在并被遗忘.

是否有任何好的技术可以在代码库中查找未使用的类?显然会有很多误报(例如库类:你可能没有使用所有的标准容器,但你想知道它们在那里),但如果它们按目录列出,那么它可能会更容易看到它一目了然.

我可以为所有类编写一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读