我目前正在开发一个大型和旧的C++应用程序,在我之前有许多开发人员.项目,类和函数中有很多"死代码",任何人都不会使用它们.
有哪些工具可用于C++分析大型代码库以检测和重构死代码?注意:我不是在谈论像gcov这样的测试覆盖率工具.
你如何在项目中找到死代码?
我想在代码库中找到未使用的函数 - 包括编译单元.我正在使用gcc作为我的编译器.
这是一个例子:
foo.c(假设合适foo.h):
void foo() {
....
}
void bar() {
....
}
Run Code Online (Sandbox Code Playgroud)
main.c:
#include <stdio.h>
#include "foo.h"
int main(void) {
bar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想得到关于foo()不被使用的警告.
有-Wunused-functiongcc选项:
-Wunused-function每当声明静态函数但未定义静态函数或未使用非内联静态函数时发出警告.-Wall启用此警告.
但它只适用于静态函数 - 它不会在上面的例子中产生警告.
我也接受可以为我做这个的工具/脚本/其他编译器的建议 - 尽管gcc如果可能的话我宁愿坚持下去.
我想在具有许多库的大型 C 应用程序中识别未使用的目标文件。该项目随着时间的推移发展了很多,现在我想搜索不再使用的库,以便我可以从依赖文件中删除它们。gcc 链接器是否可以识别任何未使用的对象?
例如,如果我用 gcc 编译一个应用程序,并且假设没有使用 library2 的任何符号/函数。有没有办法获取有关哪些对象未链接的信息?
gcc library1.o library2.o main.o -o main.elf
Run Code Online (Sandbox Code Playgroud)
我知道 gcc 有编译器和链接器标志来删除未使用的符号:
-fdata-sections -ffunction-sections -Wl,--gc-sections
Run Code Online (Sandbox Code Playgroud)
但是这样我不知道 gcc 删除了哪些对象。如果 gcc 可以选择获取未链接到应用程序的对象列表,那将是完美的。
只是提一下:我需要基于目标文件而不是基于函数/符号!
有谁知道 gcc 的这样一个选项?