我有一个在Visual Studio 2008下编译的大型遗留C ++项目。我知道有相当数量的“死”代码无法在任何地方访问 - 未调用的方法,未使用的整个类。
我正在寻找一种能够通过静态分析识别出来的工具。
这个问题:Dead code detection in legacy C/C++ project建议使用代码覆盖工具。这不是一个选项,因为测试覆盖率不够高。
它还提到了一个无法访问的代码。 gcc的选项。我想要一些类似于Visual Studio的东西。我们已经使用链接器的/ OPT:REF选项来删除冗余代码,但是这并没有报告死代码的有用级别(当与/ VERBOSE一起使用时,有超过100,000行,包括来自库的很多行。)
是否有更好的选项可以与Visual Studio项目一起使用?
答案 0 :(得分:8)
我知道Gimpel的Lint产品(PC-Lint和Flexelint)将识别无法访问的代码和未使用/未引用的模块。
它们都属于静态分析工具类别。
我与Gimpel没有任何关系,只是一个满意的长期客户。
答案 1 :(得分:6)
您需要QA-C ++(http://www.programmingresearch.com/QACPP_MAIN.html)的内容,同样请看http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis类似的产品。
您正在寻找一种可检测无法访问代码的静态代码分析工具;许多编码指南(例如MISRA-C ++,如果我没有记错的话)要求不存在无法访问的代码。专门用于执行此类指南的分析工具将是您最好的选择。
您也希望能够找到该工具的其他用途。
答案 2 :(得分:3)
我不了解Visual C,并且还推荐了-Wunreachable-code特定的覆盖工具。作为您的情况的解决方案,我会尝试以下方法:
另一种方法可能是一些调用图生成工具(例如doxygen)。
答案 3 :(得分:1)
我建议你使用几种方法: 1. GCC有一些有用的编译标志:
-Wunused-function
-Wunused-label
-Wunused-value
-Wunused-variable
-Wunused-parameter
-Wunused-but-set-parameter
2。 Cppcheck有一些有用的功能,如:
--enable=unusedFunction
3。使用之前建议的静态分析仪。
答案 4 :(得分:0)
一种适合我的方法 - 使用Delphi - 是启用调试,并在调试器下运行程序。
当在调试器下运行Delphi程序时,IDE会在边缘显示哪些代码行可以设置为断点。真正死机的代码 - 即链接器/编译器已被剥离的代码很明显,因为无法在那里设置断点。
一些补充说明,因为评论者似乎误解了这一点:
a:您不需要尝试在每一行上设置断点。只需在IDE中打开源文件,然后快速滚动它。很容易发现死代码。
b:这不是'代码覆盖'检查。您不需要运行应用程序以查看它是否到达行。
c:我对VS2008不够熟悉,所以不能说这个建议是否有效。
答案 5 :(得分:0)
要么
1)MSVC在内置static analysis tool中使用不足
2)MSVC marketplace有许多工具,包括对大多数免费工具的支持,包括CppCheck
对于市场应用程序,您将需要最新版本的Visual Studio,但免费的“Community Edition”具有非常宽松的许可。
答案 6 :(得分:-3)
编写一个随机删除函数的脚本(来自源代码)并从头开始重新编译所有内容。如果它仍然编译 - 该功能是死代码。