问题标签 [klocwork]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jenkins - Jenkins + Klocwork 社区插件增量分析
我们的 Jenkins 设置存在问题,我不确定为什么它在过去似乎有效,但这是正在发生的事情。
我们使用 kwinject 运行我们的构建,获取我们的 .out 文件,在 KW 插件中,我们针对父提交创建一个差异文件,以获取包含在 gerrit 上当前提交中更改的所有文件的 diffs_file.txt。
这一切都有效,问题是提交只修改与我们的构建过程、linux makefile、python 脚本等相关的文件。所以所有这些文件都在 diffs_files.txt 中,但显然不在我们的 KW 构建规范文件中,因为它们实际上并不是“构建”的。
这导致 kwcheck run 返回一个错误代码 1,表示没有要分析的文件,这会停止我们构建过程中的任何剩余步骤。
如果 diff_files.txt 中的文件都不在构建规范中,我有点不知所措,为什么它会返回错误代码 1。
linux - Klocwork - 如何扫描跨平台项目?
我们有一个具有单一代码库的项目,我们在 Windows 和 Linux 上构建。我们想在 Windows 和 Linux 上运行 Klocwork 代码分析。目前我们的做法是:
- 我们在 Web UI 中设置了一个 KW 项目
- 在Linux上注入和构建,将结果推送到服务器,保存报告
- 在 Windows 上注入和构建,将结果推送到服务器,保存报告
它以某种方式起作用,但问题是后者扫描有效地覆盖了第一个扫描的结果。如果我们在推送后直接保存报告,那么我们仍然可以保存副本,但是如果开发人员想要分类/分析仅在第一次构建中存在的命中(即一些 Linux 特定代码),那么几乎不可能,因为 KW已将此命中标记为“过时”(因为它在 Windows 扫描中不存在)
拥有两个项目并不是一个真正的选择,因为 90% 的代码是共享的,这将导致开发人员对相同的命中进行两次分类的巨大开销。
c++ - 如何指定符合 MISRA C++ 的字符文字?
我正在组织 Klocwork 规则并清除静态分析发现的任何问题。应用了多个规则,目前我在指定字符文字时遇到问题。让我们考虑这个例子:
如您所见,这是对 C-String 的循环迭代。它用于利用 constexpr 字符串文字的 unordered_map。性能测量证明,将它们存储为 std::string 会增加内存使用并由于开销而影响性能。由于此地图内容是恒定的,我正在使用 C-Strings 的自定义哈希函子(再次,以避免转换并将字符串复制到 std::string 只是为了生成哈希)。简单的答案是使用 std::string_view 但在此环境中不可用。所以问题来自条件本身。条件应检查字符是否以空值结尾。
显然,起初我使用!p
它,因为标准保证终止 null 解析为 false(无论 char 的真实类型是什么)。它会导致 AUTOSAR C++14 (18-03) 错误MISRA.STMT.COND.NOT_BOOLEAN
,转换为“ if 或循环语句的条件具有类型 'char' 而不是 'boolean' ”。
好的,然后我将其更改为显式比较p != 0
,结果证明是MISRA.CHAR.NOT_CHARACTER
违规行为,即“ 'char' is used for non-character value ”。
同样,这是有效的一点,因为我将 char 与 int 进行比较,但 char 既不是 int 也不是 unsigned int。因此我将其更改为*p != '\0'
应该直接转换为空字符。这反过来又给出了MISRA.LITERAL.UNSIGNED.SUFFIX
违规,即“无符号整数文字 ''\0'' without the 'U' suffix ”。现在我很惊讶。即使 char 在一个编译器中被认为是无符号的,也不能保证它是有符号的或无符号的,所以我不能将它硬编码为任何符号。甚至没有提到似乎没有办法为字符文字指定后缀。在我看来,它已经误报为'\0'
IS char 类型,不需要任何进一步的转换或强制转换。这显示了更明显的语法问题,例如uri.find_last_of('/')
我正在寻找特定的字符,而不是特定的价值。这种情况会产生同样的错误,抱怨我没有指定后缀。(uri 是 std::string)
我的猜测是,这是错误过滤器实现的误报。此外,似乎静态分析可能被错误配置,因为字符文字仅在 C 中被认为是整数,而不是在 C++ 中。
作为旁注,我将在第一个示例中补充说,使用*p != char(0)
解决了这个问题,但这远非首选解决方案,并且只能与已知的字符整数值一起使用,这远不如使用文字灵活且容易出错,因此我不会使用此解决方法。
你对这个问题有什么看法?也许其他人已经遇到了这样的 Klocwork 错误并找到了解决方案,而不是为每个文字字符实例禁用规则或抑制它。我已经有了我的常见误报列表,这些误报通常来自 C++11 和更新的标准,由基于 MISRA 2008 C++ 的规则检查。
c++ - Klocwork Inside 的资源泄漏
使用此代码:
Klocwork 表示资源泄漏:
有人知道为什么吗?
@Sivanesh Waran您好,感谢您的帮助,但我尝试了不同的代码并且总是得到相同的错误,即使使用该代码:
c - Klocwork 分析指标问题不明确
我不明白这个问题:
问题:HIS Metriken - Cyclomatic (CR-MET4):[function_name] 13>10
在检查代码问题时出现在 Klocwork 分析中:METRICS.E.HIS_Metriken___Cyclomatic__CR_MET4_
有人可以支持吗?
谢谢
c++ - boost::program_options 在 Klocwork 中生成 MLK.MUST
我基于 Boost 库编写了以下 C++ 代码,以从命令行获取输入。
它按预期工作。但是,Klocwork 报告了以下错误(我已调整此代码段的行号):
我发现这个旧帖子boost program_options 生成了一个 Klocwork MLK.MUST。但是,阅读答案后,我仍然不知道如何解决这个问题。
Klocwork 报告的另一个问题是'port' is used uninitialized in this function
. 它特别提到passing '&port' to 'po::value<int>' does not initialize 'port'
. 但是,在运行代码后,我看到它确实初始化了端口,因为端口的值打印为 1234 而不是 9999。
有没有办法编写这段代码来解决上述问题?
c++ - C++ 代码异味:初始化器大括号放置不正确
我正在尝试在从 Klocwork(KW) 生成的 C++ 代码中修复以下代码异味:
MISRA.INIT.BRACES:初始化器大括号放置不正确
下面是我试图清理的代码片段。
我尝试了许多不同的护腕放置方式,但似乎无法弄清楚我目前拥有的护腕放置的确切问题。这不会产生任何编译错误,也不会对代码产生负面影响。也许这只是KW,但只是想在我完全放弃之前得到一些想法。
下面是我尝试的另一种护腕放置,以防有人将其作为答案扔掉:
c++ - 如何避免在 C++ 中初始化和赋值时出现 Klockwork 警告
我正在运行静态代码分析并发现警告。
对于下面的代码片段,我收到代码中指定的警告。是否有解决方法来实现以下代码来解决警告?
arrays - 无法解决 KlockWork 缓冲区溢出错误
我无法找出这个 KlockWork 问题的解决方案。
KlockWork 显示 ABV.GENERAL (1:P1) Defer 以下代码
错误:大小为 'size*4' 的数组 'arr' 可能使用索引值 min(size+(-1), 255)..min(size+(-1), 255)
请提出一些避免此错误的方法。
谢谢