使用 Jenkins 在 cppcheck 中重复相同的文件、行和错误
Posted
技术标签:
【中文标题】使用 Jenkins 在 cppcheck 中重复相同的文件、行和错误【英文标题】:Repeating the same files, lines and errors in cppcheck with Jenkins 【发布时间】:2020-07-20 09:18:55 【问题描述】:我在 Jenkins 中运行 cppcheck 以获得 Visual Studio 解决方案。
不幸的是,我反复出现错误,因此 cppcheck-run 的结果如下所示:
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
这是我的 Jenkins shell 命令:
cppcheck --project="C:\FancyCode.sln" --xml --xml-version=2 $WORKSPACE 2> cppcheck.xml
我想知道是不是因为解析了解决方案文件以及其中包含的所有标题?
我只是使用了不正确的标志吗?我认为不主动启用所有功能就足够了......
我想让它们被提及一次,也在摘要中,而不是重复 600 次。
感谢您的努力和时间!
================================================ ============================== 编辑:
这是 xml 文件的输出。首先它显示了一些没有 xml 样式正文的乱码:
memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' ......更多相同的...... varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA varA varA hServSock memset 'std::chrono::time_point' varA varA pProcessName pProcessName memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA newBody newBody newBody newBody memset 'std::chrono::time_point' varA varA varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA varA varA varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' 内存集 'std::string' 内存集 'std::string' memset 'std::string' memset 'std::string' varA varA memset 'std::chrono::time_point' 内存集 'std::string' 内存集 'std::string' memset 'std::string' memset 'std::string' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::string' memset 'std::string' memset 'std::string' memset 'std::string' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' 内存集 'std::string' 内存集 'std::string' memset 'std::string' memset 'std::string' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' 内存集 'std::chrono::time_point' 内存集 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' memset 'std::string' memset 'std::string' memset 'std::string' memset 'std::string' varA varA memset 'std::chrono::time_point' memset 'std::string' memset 'std::string' 内存集 'std::string' 内存集 'std::string' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' 内存集 'std::chrono::time_point' 内存集 'std::chrono::time_point' varA varA mode mode memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA memset 'std::chrono::time_point' varA varA 此 XML 文件 似乎没有任何与之关联的样式信息。这 文档树如下所示。
然后它会进一步使用 cppcheck 的 xml 样式输出,但它也会在那里重复错误。正如我所看到的,它也会做出这样的事情:
File123.h line 132 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
File123.h line 132 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 91 error memsetClass false Using 'memset' on class that contains a 'std::string'
FileXYZ.h line 92 error memsetClass false Using 'memset' on class that contains a 'std::string'
File123.h line 132 error memsetClass false Using 'memset' on class that contains a 'std::string'
这可能是计时错误的具体问题吗?我将尝试使用计时错误排除此文件,如果解决了它,我将向 cppcheck 写一个错误报告?!
谢谢,如果你有其他想法,我会很高兴,因为这样 cppcheck 在 Jenkins 中是没用的。
【问题讨论】:
【参考方案1】:我是一名 Cppcheck 开发人员。
我不确定您为什么会出现这种行为。我们会尽量避免重复警告。
我无法立即重现此内容。我试图在我们的一个标题中添加一个错误.. 并且仅在我测试时报告一次(我使用 --project 导入了一个 Visual Studio 项目)。
xml 输出中的错误有什么不同吗?
【讨论】:
我在编辑下放了一些 xml 的更多信息。如果我必须提交错误报告,我会这样做。感谢您的支持! 随时提交错误报告。但是如果没有办法重现,不幸的是很难解决这个问题。 :-(我建议您尝试将代码一分为二。删除一些类/函数/等,看看cppcheck是否仍然报告重复警告。如果项目很大,那么我想第一步是确定你是否可以手动检查 2-3 个文件而不是所有文件时会收到重复警告。如果您使用--verbose
,Cppcheck 应该打印出检查每个文件时使用的预处理器配置。
您还可以使用--file-filter
限制检查哪些文件。即类似cppcheck --project=foo.sln --file-filter="x*.cpp"
以上是关于使用 Jenkins 在 cppcheck 中重复相同的文件、行和错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 email-ext 插件从 Jenkins 发送 Cppcheck 结果/报告
JenKins结合cppcheck及cpplint进行代码风格及静态代码检测