在大型C++遗留应用程序中发现“死代码”[已关闭]

h4cxqtbf  于 2023-07-01  发布在  其他
关注(0)|答案(8)|浏览(92)

**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。

我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
6年前关闭。
Improve this question
我目前正在开发一个大型的C应用程序,在我之前有很多开发人员。项目中有很多“死代码”,类和函数不再被任何人使用。
C
有哪些工具可以用来分析大型代码库,以检测和重构死代码?注意:我不是在谈论像gcov这样的测试覆盖工具。
如何找到项目中的死代码?

m528fe3b

m528fe3b1#

你需要使用一个静态分析工具

我遇到的主要问题是,你必须小心,不要从你无法控制/拥有的地方使用任何库。如果你从一个类中删除了一个函数,而这个函数是通过引用你项目中的一个库来使用的,你可能会破坏一些你不知道使用了代码的东西。

57hvy0tb

57hvy0tb2#

您可以使用Cppcheck来实现此目的:

$ cppcheck --enable=unusedFunction .
Checking 2380153.c...
1/2 files checked 0% done
Checking main.c...
2/2 files checked 0% done
[2380153.c:1]: (style) The function '2380153' is never used.
ecbunoof

ecbunoof3#

Caolán McNamara的callcatcher在LibreOffice项目中被非常有效地用于查找死代码(~6 MLOC)。

9jyewag0

9jyewag04#

我认为你最好的选择可能是一个覆盖工具。对于 *nix和windows都有很多。如果你有单元测试,这很容易--如果你有一个低的测试覆盖率,那么未覆盖的代码要么是死的,要么还没有测试过(无论如何,你都需要这两条信息)。如果你没有单元测试,使用这些工具中的一个工具来构建你的应用,通过一些(理想情况下应该都是)执行路径来运行它,然后查看报告。你得到的信息和单元测试一样,只需要更多的工作。
由于您正在使用VisualStudio,我可以提供几个您可以考虑使用的链接:

它们都不是免费的,甚至都不便宜,但结果通常是值得的。
在类似 * nix的平台上,gcovzcovlcov等工具结合使用是一个非常好的选择。

k97glaaz

k97glaaz5#

没有什么比熟悉代码更好的了。或许除了严格的修剪。
有时候看起来像朽木的东西被用作单元测试的脚手架,或者它看起来是活的,仅仅是因为遗留单元测试执行了它,但是它从来没有在测试之外执行过。不久前,我删除了1000多个支持外部CAD模型转换器的LOC,我们测试了调用这些外部转换器的测试,但这些转换器已经不支持了8年多,即使应用程序的用户想要调用它们也是不可能的。
除非一个人在清除死木方面非常严格,否则你会发现你的团队多年来一直在维护这些东西。

djmepvbi

djmepvbi6#

一种方法是在类和函数名上使用“查找所有引用”上下文菜单项。如果一个类/函数只在其自身中被引用,那么它几乎肯定是死代码。
另一种方法,基于同样的想法,是从项目中删除(注解掉)文件/函数,看看你会得到什么错误消息。

9udxz4iz

9udxz4iz7#

查看我们的SD C++ Test Coverage
你需要做大量的动态测试来测试代码,以确保达到最大的覆盖率。代码“未覆盖”可能会死,也可能不会死;也许您只是没有一个测试用例来执行它。

ffvjumwh

ffvjumwh8#

虽然不是专门针对死代码的,但我发现了源代码导航器
http://sourcenav.berlios.de/
相当有用,虽然设置起来很麻烦,而且有点bug。那是一年前在Linux(Fedora)上。

相关问题