如何在 Visual C++ 2008 中查找未使用的属性/方法
Posted
技术标签:
【中文标题】如何在 Visual C++ 2008 中查找未使用的属性/方法【英文标题】:How to find unused attributes/methods in Visual C++ 2008 【发布时间】:2008-09-29 14:09:24 【问题描述】:有没有办法在 Visual C++ 2008 Professional 中识别未使用的属性/方法?如果默认情况下无法实现,也非常感谢第三方工具的推荐。
谢谢, 弗洛里安
编辑: nDepend 仅适用于 .NET 程序集。我正在寻找可以与本机 C++ 应用程序一起使用的东西。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何在 Visual C++ 2008 中查找未使用的属性/方法的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2008 / C#:如何在项目中查找死代码?
如何在visual studio2008中创建,编译和运行C++程序,
如何在 Windows 7 中使用 OpenGL、Glut 和 Visual Studio 2008 准备 C++ 项目
如何在 Visual C++ 2008 中访问数学常量(例如 M_PI)?