VS2019:静态分析问题修复,优化和其他更新
C++静态分析开发团队一直致力于帮助C++开发者尽可能地编写安全的代码。我们正在添加越来越多的代码安全检查,并解决来自于C++开发社区里反馈的影响比较广泛的问题。在此,我们感谢一直以来陪伴着我们的用户,你们的使用反馈是我们前进的方向。在今天的文章中,我将汇总从VS2019 v16.9到v16.10版本中有关代码分析和CppCoreCheck的功能改进和问题修复。
新特性
> C26479 是一个新的,可以支持F.48的警告信息,请不要使用 std::move 返回局部变量。> C26458 是一个新警告,用作 C26446 路径敏感版本。 有关它的更多信息,我们在5月中旬发表了一篇专门的博客文章,感兴趣的读者可以参考那篇文章。> C26800 用于检测变量在移出后是否使用。它不再是实验规则,现在是默认规则的一部分。> 最初在v16.2中引入的有关生命周期的两个警告:C26810 和 C26811,它们不再是实验性的,可以通过选择默认规则集或“CppCoreCheckLifetimeRules”来使用。> 仅当指定了编译选项/analyze:log:includesuppressed时,才会填充Sarif抑制属性。 这对于审核一份抑制后的代码库很有用。
分析崩溃修复
> 修复了由初始化程序列表中的空括号初始化程序导致的分析引擎崩溃,如下图所示:
> 修复了使用 WDK 中的驱动程序插件时分析引擎崩溃的问题。
问题修复和功能改进
> C.35 不再对标记为 final 的类中标记为 override 的函数发出警告。> C26434 的消息字符串已更新以删除对 C.128 的引用。 此警告与 C.128 不一致,但仍然是防止隐藏成员函数的有用警告。> 修复有关C26414的误报,具体来说,它主要是针对从std::make_unique返回的某些唯一指针,在返回这些指针的时候,调用者没有参数传递给std::make_unique。如下图所示:
> C26800 – 使用移动对象。避免在被调用函数没有右值引用参数的函数体中进行分析。修复了使用协程时出现的误报。
> 改进了C26812的检测,“prefer enum class over enum”
> 修复了代码包含if表达式时C6285和C6237的误报。如下图所示:
> 协程检查的改进修复了导致针对错误行发出警告的问题。使用右值引用改进了对案例的检测。使用std::suspend_never 复了代码中的误报
> 修复了由于使用 std::optional 导致的本地生命周期检查中的误报,如下图所示:
> 修复了if表达式块中代码的边界警告,如下图所示:
> 修复了包含非ASCII字符的文件路径的分析失败问题。
> 对uninit检查的一般性改进。
总结
编写健壮的应用程序,主要还是通过编写安全的代码。我们应该追求的是:不仅能干完活,还要”干得漂亮”。