【问题标题】:How to model to ignore Coverity Scan C++ 'noexcept' false-positives?如何建模以忽略 Coverity Scan C++ 'noexcept' 误报?
【发布时间】:2017-09-19 19:50:56
【问题描述】:

随着 Coverity 开始将 C++11 noexcept 识别为 throw(), 它在调用第三方库的代码中产生虚假的误报 像升压。 此外,一些代码故意在异常时崩溃 因为这种情况下的异常是不可恢复的、合同外的或错误的。

此案例的覆盖率报告示例如下:

CID 178772(1 个中的第 1 个):未捕获的异常 (UNCAUGHT_EXCEPT)exn_spec_violation:抛出了 boost::exception_detail::clone_impl > 类型的异常,但抛出列表 throw() 不允许它被抛出。这将导致对通常调用终止()的意外()的调用。

要提交给 Coverity 扫描以全局忽略 noexcept 的建模文件是什么?

【问题讨论】:

    标签: c++ noexcept coverity false-positive


    【解决方案1】:

    如果您编辑user_nodefs.h 文件(默认情况下不存在,被配置引用,应该与您的coverity_config.xml 存在于同一目录中)您可以简单地添加#define noexcept(x) - 这将变成@987654324 @ 到一个空的定义中,因此什么都不做。

    您是否考虑过使用组件从您的视图中排除第三方缺陷?

    【讨论】:

    • 提交是通过 Travis-CI 集成完成的,所以我不确定coverity_config.xml 的位置。
    • “去齿”方法是有问题的,因为代码中允许使用noexceptnoexcept(...)。如何用一个宏对它们进行除齿?
    • 这有点困难(任何宏观问题的答案都是一样的)。您可以尝试使用 ppp_translator - 您可以通过 --xml-option 将其指定为 cov-configure。例如,cov-configure ... '--xml-option=append_arg:--ppp_translator=replace/noexcept\s*(\(.*\))?/'。 ppp_translator 采用正则表达式并在预处理器生效之前应用(ppp 代表'pre-pre-process'),因此您也可以使用它来将代码按摩成对宏更友好的形式。跨度>
    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多