用于非 .Net C++ 代码的 FxCop(或等效项)

Posted

技术标签:

【中文标题】用于非 .Net C++ 代码的 FxCop(或等效项)【英文标题】:FxCop (or equivalent) for non-.Net C++ code 【发布时间】:2010-02-10 00:32:53 【问题描述】:

有没有办法让 FxCop 分析非托管 C++ 代码?设置 /clr 标志允许 FxCop 打开 .exe。它找到了很多 C++ 项目,但对代码的分析非常薄弱。例如,以下代码被跳过:


int i=0;
if (i=2) printf("Don't worry..everything will be okay.");

我想要一个可以捕获i=2 并警告它应该是i==2 的工具。关于让 FxCop 更彻底或其他人认为有用的其他工具的任何建议?

【问题讨论】:

【参考方案1】:

MSVC(至少 VC9/VS2008)已经对您的具体示例发出警告:

warning C4706: assignment within conditional expression

(糟糕:我刚刚意识到我的测试项目设置已升至警告级别 4 - /W4。MSVC 在默认设置下不会发出此警告)。因此,将项目设置设置为 /W4 并获得更多诊断信息(希望没有太多噪音)。

我发现 VC9 中的警告相当不错,如果你想强制问题,你可以轻松设置编译器将它们视为错误。

Visual Studio 的 Team Server 版本包含对 PREfast 的支持 - 来自 Microsoft 的静态分析工具(该选项位于 C++ 项目的高级/启用 C/C++ 代码分析中)。您也可以在 Windows 驱动程序工具包和/或 Windows SDK 中获得该工具,但我不能保证将 WDK/SDK 版本集成到 Visual Studio 中的说明:

http://blogs.msdn.com/vcblog/archive/2008/02/05/prefast-and-sal-annotations.aspx http://buildingsecurecode.blogspot.com/2007/08/security-code-scanning-with-microsoft.html

有些人喜欢的另一种选择(非免费)是Gimpel's PC-Lint product。

【讨论】:

【参考方案2】:

我们使用coverity,不是免费的,而是一个很棒的静态分析工具

【讨论】:

以上是关于用于非 .Net C++ 代码的 FxCop(或等效项)的主要内容,如果未能解决你的问题,请参考以下文章

FxCop 或其他实用程序需要 VB.NET 中的内联文档? [关闭]

.NET标准化题目

有没有办法在 FxCop 10.0 中获取 CAT.NET 规则

ASP.NET Web 应用程序的 FxCop 规则列表子集

Fxcop 针对 VS 2010 设计的自定义代码不适用于 VS 2012

尝试使用 HTTParty 或 Net:HTTP(或等)连接到“摘要式身份验证”网络服务