【问题标题】:How to find unused attributes/methods in Visual C++ 2008如何在 Visual C++ 2008 中查找未使用的属性/方法
【发布时间】:2008-09-29 14:09:24
【问题描述】:

有没有办法在 Visual C++ 2008 Professional 中识别未使用的属性/方法?如果默认情况下无法实现,也非常感谢第三方工具的推荐。

谢谢,
弗洛里安

编辑: nDepend 仅适用于 .NET 程序集。我正在寻找可以与本机 C++ 应用程序一起使用的东西。

【问题讨论】:

    标签: c++ visual-studio visual-studio-2008 visual-c++ static-analysis


    【解决方案1】:

    试试PC-Lint。它非常擅长查找冗余代码。 我还没有尝试过版本 9。版本 8 确实需要一些时间来配置。 试试在线互动演示。

    【讨论】:

    • 这正是我一直在寻找的。 Visual Studio 有一个 VisualLint 插件,它集成了 PC-Lint。一个更便宜的解决方案会很好,但似乎什么都没有。
    【解决方案2】:

    我没有亲自使用过他们的生产力工具(我使用他们的 Windows 控制套装),但看起来 DevExpress 有一个名为 Refactor! for C++ 的 C++ 重构器。我没有立即发现您正​​在寻找的功能,但也许他们有?

    【讨论】:

      【解决方案3】:

      Coverage Validator 可以显示未使用的 C++ 代码(但不能显示属性)。它是动态执行的,因此您必须“exersize”应用程序才能获得结果: http://successfulsoftware.net/2008/03/10/coverage-validator/

      【讨论】:

        【解决方案4】:

        棘手的一点是 C++ 中的许多函数必须存在,即使它们没有被调用。 Boost 尤其会导致这种情况,但即使是常规的 STL 代码也可以做到这一点。你的代码必须配合。您可能会定义一个复制 ctor,因为 std::vector 正式需要它。但是,如果您不实例化任何实际复制 T 的 std::vector 成员,则您的复制 ctor 将保持未使用状态。

        即使他们不必这样做,他们也经常为了安全而存在。例如,声明私有复制构造函数可以防止对象意外复制。如果没有私有声明,编译器将为您定义一个公共的、按成员的复制 ctor。现在,这是“未使用”吗?您想收到有关它们的警告吗?

        【讨论】:

          【解决方案5】:

          PC-Lint 非常强大,但很难精简。当然,这很好地描述了 C 和 C++,不是吗?

          另一个我认为非常棒的工具是 Whole Tomato 的 Visual Assist X,它直接集成到 IDE 中。

          在搜索未引用的代码时,C++ 中存在一些大问题:模板、回调和消息处理程序可能对您的项目至关重要,但从不直接调用。例如,线程的处理程序不是直接调用的,而是创建新线程时的参数。 MFC 或 WTL 项目中的“On_buttonpress”类型消息也会显示为未调用的方法。

          找到它们后,您可以将 PC-Lint 配置为忽略这些,但第一次需要大量工作。

          【讨论】:

          • 您能否详细说明 Visual Assist X 如何帮助查找未使用的代码?
          【解决方案6】:

          nDepend 会这样做,同时打扫你的房子和带狗去散步。有一个免费的 nagware 版本。

          以下代码查询语言语句将为您提供未使用方法的列表

           WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE MethodCa == 0 AND 
             !IsPublic AND !IsEntryPoint AND !IsExplicitInterfaceImpl AND 
             !IsClassConstructor AND !IsFinalizer
          

          【讨论】:

            猜你喜欢
            • 2011-04-06
            • 2012-09-07
            • 1970-01-01
            • 1970-01-01
            • 2010-11-17
            • 2010-12-01
            • 2011-12-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多