【问题标题】:Scan for "dead" functions in project / class (Visual Studio) [closed]扫描项目/类(Visual Studio)中的“死”函数[关闭]
【发布时间】:2015-11-05 23:16:47
【问题描述】:

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

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

P.S.:该项目使用 C++ 空间,请不要提供这样的 ReSharper 或 .NET 插件。

【问题讨论】:

  • Visual Studio 中有一个查找所有引用的按钮,但它有时会遗漏一些东西(尤其是如果您有宏或模板)。视觉辅助效果更好,但价格昂贵。无论如何,如果你有虚函数,没有人能通过查看代码来判断它们是否真的被调用了。

标签: c++ visual-studio refactoring


【解决方案1】:
  1. 我找到了 Microsoft Visual Studio 2015 Link 的此文档。也许链接器可以帮助您(您可以使用 /VERBOSE 选项查看 /OPT:REF 删除的函数和 /OPT:ICF 折叠的函数。 )。

控制 LINK 在构建期间执行的优化。

/选择:{REF | NOREF}

参考 | NOREF /OPT:REF 消除了永远不会出现的函数和数据 参考; /OPT:NOREF 保留永远不会存在的函数和数据 参考。启用 /OFT:REF 时,LINK 会删除未引用的 打包的函数和数据。一个对象包含封装的函数和 数据(COMDAT),如果它是使用 /Gy 选项编译的。这 优化称为传递 COMDAT 消除。默认, /OPT:REF 在非调试版本中启用。要覆盖此默认值并 在程序中保留未引用的 COMDAT,指定 /OPT:NOREF。你可以 使用 /INCLUDE 选项覆盖特定符号的删除。 当显式或默认启用 /OPT:REF 时,有限的 /OPT:ICF 的形式已启用,仅折叠相同的功能。如果 你想要 /OPT:REF 但不是 /OPT:ICF,你必须指定 /OPT:REF、NOICF 或 /OPT:NOICF。如果指定了 /DEBUG,则默认为 /OPT 为 NOREF,所有功能都保留在映像中。到 覆盖此默认值并优化调试构建,指定 /选择:参考。因为 /OPT:REF 暗示 /OPT:ICF,我们建议您 还指定 /OPT:NOICF 以在调试中保留相同的功能 构建。这使得读取堆栈跟踪和设置断点变得更加容易 在本来可以折叠在一起的功能中。 /OPT:REF 选项禁用增量链接。您必须明确标记 const 数据作为 COMDAT;使用 __declspec(selectany)。指定 /OPT:ICF 确实 不启用 /OPT:REF 选项。

  1. Check this link,也许它也会有所帮助。主要建议是使用外部工具进行静态分析或代码覆盖。

【讨论】:

    【解决方案2】:

    15 秒的谷歌搜索给了我这个:

    Link

    在构建菜单中选择对 YourProjectName 运行代码分析。在输出窗口中,您应该会看到类似这样的警告,用于未使用的子例程

    【讨论】:

    • 这看起来像一个 .Net 警告。原生规则集似乎没有此规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2021-02-11
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多