习净明心 2024-05-07 17:42 采纳率: 0%
浏览 1

cppcheck新版本特别慢

在linux环境使用命令行启动,工程是cmake编译的。
使用cppcheck2.13默认直接检查代码花费1.5h
相比之前
使用的cppcheck2.6默认直接检查相同代码只花费1-2分钟

如果选择了--prjfile compile_commands.json 检查真正的宏定义配置和真实编译文件速度会更慢。
之前2.6可以集成进Jenkins自动化检查,现在这个速度完全没法做完自动检查一部分了,英文论坛去搜索slow没有找到有人说这个,来问问csdn有没有人遇到这种情况。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 17:42
    关注

    引自免费微信小程序:皆我百晓生

    面对您描述的问题,我们可以尝试以下几个步骤来优化cppcheck的执行速度:

    1. 更新CMakeLists.txt: 确保您的CMakeLists.txt文件正确包含了cppcheck的依赖项,并且将cppcheck作为目标添加到构建流程中。这样可以在编译期间收集必要的信息,减少运行时分析的时间。以下是示例代码片段:
    find_package(Cppcheck REQUIRED)
    add_custom_target(check ALL
        ${Cppcheck_EXECUTABLE} --enable=all --inconclusive ${SOURCE_FILES})
    

    这里SOURCE_FILES应该替换为实际的源文件列表。

    1. 限制检查范围: 通过指定要检查的特定目录或文件,您可以减小cppcheck的工作负载。例如,如果您知道某个子模块有问题,可以仅检查那个模块:
    cppcheck -I <include_path> --project=<compile_commands.json> <directory_or_file>
    
    1. 利用并行化: cppcheck支持多线程处理,通过增加--threads选项可以启用并行检查。这可能会加快执行速度,但具体效果取决于您的硬件资源(CPU核心数):
    cppcheck -I <include_path> --project=<compile_commands.json> --threads=4 <directory_or_file>
    
    1. 排除无用的规则: 某些cppcheck检查可能对您的项目来说并不是很重要,或者可能导致性能下降。查看cppcheck的文档,找出哪些规则可以安全地禁用。例如,您可以使用--suppress选项来抑制一些警告:
    cppcheck -I <include_path> --project=<compile_commands.json> --suppress="rule_name" <directory_or_file>
    
    1. 使用旧版插件: 如果可能的话,尝试回退到2.6版本的cppcheck插件,看看是否能恢复之前的性能。如果这样做有效,您可能需要联系cppcheck开发者报告这个问题,或者寻找其他替代品。

    2. 调整cppcheck配置: 根据您的项目特点,尝试调整cppcheck的一些配置选项,比如减少冗余检查、优化内存使用等。查阅cppcheck的官方文档,了解更多的配置选项。

    3. 使用静态分析工具对比: 尝试使用其他静态分析工具(如Clang-Tidy或PVS-Studio),看它们在您的项目上的表现如何。这些工具可能有不同的性能特性,也许其中某一个更适合您的需求。

    4. 优化系统资源: 确保您的Linux系统有足够的内存和CPU资源用于cppcheck。如果可能,尝试清理不必要的进程,或者分配更多资源给cppcheck。

    5. 硬件升级: 如果上述方法都无法满足要求,考虑升级硬件,尤其是增加RAM和使用更快的CPU,以提升整体性能。

    6. 提交bug报告: 如果经过以上优化后,cppcheck的性能仍然显著降低,建议您向cppcheck项目的GitHub仓库提交一个bug报告,提供详细的配置信息和测试案例,以便开发人员进行调查。

    希望以上的建议对您有所帮助。如果还有任何疑问,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路