- cplusplus/
- C++ 扫描;“死亡”;项目/类中的函数(Visual Studio)
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警告。本机规则集似乎没有此规则。