题
我有一个巨大的遗赠C++项目下编写Visual Studio2008年。我知道有一个合理数额的'死亡'的代码没有被访问的任何地方--的方法,不叫,整个类别,是未使用。
我在寻找一种工具,将确定这个的 静态分析.
这个问题: 死亡代码检测在遗产C/C++项目 建议使用代码复盖率的工具。这不是一个选项,作为测试的复盖率不够高。
它还提到一个-Wunreachable码。选项。我想类似的东西Visual Studio.我们已经开始使用连接的巴勒斯坦被占领土:在参考的选择删除多余的代码,但这并不报告的死亡代码在一个有用的水平(当使用/冗长有超过100,000线,包括许多来自库)。
是否有更好的选项的工作以及与一些工作室的项目?
解决方案
您会希望沿着QA-C ++( HTTP线的东西://www.programmingresearch。 COM / QACPP_MAIN.html ),也见 http://en.wikipedia.org/wiki / List_of_tools_for_static_code_analysis 的类似产品。
您正在寻找一个静态代码分析工具检测不到的代码;许多编码规则(如MISRA-C ++,如果我没有记错)要求,没有不到的代码存在。专门针对一种分析工具来实施这样一个准则将是最好的选择。
和你会喜欢能找到的工具其它用途。
其他提示
我不懂 Visual C,并且还推荐了 -Wunreachable-code 特定覆盖工具。作为针对您情况的解决方案,我会尝试以下操作:
- 使用 ctags(或类似程序)制作源代码中所有符号的列表
- 在编译器中启用死代码消除(我假设它默认为打开)
- 启用您的整个程序/链接时间优化(这样他就知道您的模块中未使用的函数不需要其他外部组件并被丢弃)
- 从二进制文件中取出符号并将它们与 1 中的符号进行比较。
另一种方法可能是一些调用图生成工具(例如氧)。
我建议你用几个方法: 1. GCC有一些有用的编译标志:
-Wunused-function
-Wunused-label
-Wunused-value
-Wunused-variable
-Wunused-parameter
-Wunused-but-set-parameter
2。 Cppcheck有一些有用的特性,如:
--enable=unusedFunction
3。使用静态分析器如前建议。
一种方法是对我的作品 - 用Delphi - 是使调试,在调试器下运行程序
当一个Delphi程序在调试器下运行时,IDE示出了其中的行代码可以被设置为断点的余量。这是真正的死代码 - 即,已经由连接体剥离出/编译器是显而易见的断点不能设置有
一些附加的注释,如评议似乎误解这样:
答:你不需要尝试每一行设置一个断点。只要打开在IDE中的源文件,并通过它快速滚动。死代码容易被发现。
B:这不是一个“代码覆盖”检查。你并不需要运行的应用程序,看它是否达到了线。
C:我不熟悉不够VS2008所以不能说,如果这个建议会奏效。
写脚本,随机删除功能(从源代码),并重新编译一切从头开始。如果仍然编译 - 该功能是死代码