Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 扫描;“死亡”;项目/类中的函数(Visual Studio)_C++_Visual Studio_Refactoring - Fatal编程技术网

C++ 扫描;“死亡”;项目/类中的函数(Visual Studio)

C++ 扫描;“死亡”;项目/类中的函数(Visual Studio),c++,visual-studio,refactoring,C++,Visual Studio,Refactoring,我有一个很大的项目,有很多死代码(大量未引用的函数) 如何检测类中未使用的函数 P> S.:项目使用C++空间,请不要提供RESARPER或.NET插件这样的软件。< /P> < P > 15秒的Google给了我这个: 在“生成”菜单中,选择在项目名称上运行代码分析。在输出窗口中,对于未使用的子例程,您应该看到类似这样的警告 我找到了Microsoft Visual Studio 2015的文档。也许链接器可以帮助您实现这一点(您可以使用/VERBOSE选项查看/OPT:REF删除的函数和/

我有一个很大的项目,有很多死代码(大量未引用的函数)

如何检测类中未使用的函数


P> S.:项目使用C++空间,请不要提供RESARPER或.NET插件这样的软件。< /P> < P > 15秒的Google给了我这个:

在“生成”菜单中,选择在项目名称上运行代码分析。在输出窗口中,对于未使用的子例程,您应该看到类似这样的警告

  • 我找到了Microsoft Visual Studio 2015的文档。也许链接器可以帮助您实现这一点(您可以使用/VERBOSE选项查看/OPT:REF删除的函数和/OPT:ICF折叠的函数。
  • 控制LINK在生成期间执行的优化

    /OPT:{REF|NOREF}

    REF | NOREF/OPT:REF消除了永远不可用的函数和数据 参考/OPT:NOREF保留永远不可用的函数和数据 参考。启用/OFT:REF时,链接将删除未引用的链接 打包的函数和数据。对象包含打包的函数和 数据(COMDATs),如果它是使用/Gy选项编译的。这 优化称为传递COMDAT消除。默认情况下, /OPT:REF在非调试版本中启用。要覆盖此默认值,请执行以下操作: 在程序中保留未引用的COMDAT,指定/OPT:NOREF。你可以 使用/INCLUDE选项替代特定符号的删除。 当显式或默认启用/OPT:REF时,有限的 /OPT的形式:启用仅折叠相同功能的ICF。如果 您需要/OPT:REF但不需要/OPT:ICF,必须指定其中一个 /选项:REF、NOICF或/OPT:NOICF。如果指定了/DEBUG,则默认为 /OPT是NOREF,所有函数都保留在图像中。到 覆盖此默认值并优化调试生成,请指定 /OPT:REF。由于/OPT:REF意味着/OPT:ICF,我们建议您 还指定/OPT:NOICF以在调试中保留相同的函数 建立。这使得读取堆栈跟踪和设置断点更容易 在原本可以折叠在一起的功能中。/OPT:REF 选项禁用增量链接。您必须显式地标记const 作为COMDAT的数据;使用declspec(选择任意)。指定/OPT:ICF没有 不启用/OPT:REF选项

  • ,也许也会有帮助。这里的主要建议是使用外部工具进行静态分析或代码覆盖

  • VisualStudio中有一个“查找所有引用”按钮,但它有时会遗漏一些内容(特别是当您有宏或模板时)。视觉辅助效果更好,但价格昂贵。在任何情况下,如果您有虚拟函数,没有人能够通过查看代码来判断它们是否被实际调用。这看起来像是一个.Net警告。本机规则集似乎没有此规则。