You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.3 KiB

Cppcheck 集成使用指南

概述

项目现已集成 cppcheck 自动运行功能,可以:

  1. 自动运行 cppcheck 对项目进行静态分析
  2. 自动生成 XML 报告
  3. 自动读取报告并生成测试用例
  4. 自动验证生成的测试用例

快速开始

方式一:自动运行 cppcheck推荐

直接指定要检查的项目文件或目录,系统会自动运行 cppcheck 并生成测试用例:

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/math.c \
  --project-root /home/feng/test \
  --out ./test_results \
  --use-templates \
  --auto-verify

方式二:使用已有报告

如果已有 cppcheck 报告文件:

python3 -m cppcheck_test_generator.main \
  /home/feng/test/cppcheck_report.xml \
  --project-root /home/feng/test \
  --out ./test_results \
  --use-templates \
  --auto-verify

新增参数说明

--target <路径>

  • 功能: 指定要检查的项目文件或目录路径
  • 说明: 提供此参数后,系统会自动运行 cppcheck 生成报告
  • 示例: --target /home/feng/test/math.c--target /home/feng/test/

--run-cppcheck

  • 功能: 显式启用自动运行 cppcheck
  • 说明: 需要配合 --target--project-root 使用
  • 示例: --run-cppcheck --target /path/to/project

--cppcheck-std <标准>

  • 功能: 指定 C/C++ 标准
  • 可选值: c99, c11, c++17, c++20
  • 说明: 如果不指定,系统会根据文件扩展名自动检测
  • 示例: --cppcheck-std c99

--cppcheck-timeout <秒数>

  • 功能: 设置 cppcheck 执行超时时间
  • 默认值: 300 秒
  • 示例: --cppcheck-timeout 600

完整工作流程

1. 自动运行 cppcheck → 生成报告 → 生成测试用例 → 自动验证

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/math.c \
  --project-root /home/feng/test \
  --out ./complete_test \
  --use-templates \
  --auto-verify \
  --max 5

执行步骤:

  1. 自动运行 cppcheck 检查 math.c
  2. 自动生成 XML 报告到 ./complete_test/cppcheck_report.xml
  3. 解析报告并过滤问题
  4. 生成测试用例(最多 5 个)
  5. 自动验证所有测试用例
  6. 生成验证报告

2. 仅运行 cppcheck 生成报告

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/math.c \
  --project-root /home/feng/test \
  --out ./reports_only \
  --max 0

这会运行 cppcheck 并生成报告,但不会生成测试用例(--max 0)。

实际使用示例

示例 1: 检查单个 C 文件

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/math.c \
  --project-root /home/feng/test \
  --out ./math_tests \
  --cppcheck-std c99 \
  --use-templates \
  --auto-verify

示例 2: 检查整个项目目录

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/ \
  --project-root /home/feng/test \
  --out ./project_tests \
  --use-templates \
  --smart-select \
  --smart-max 10 \
  --auto-verify

示例 3: 使用增强分析模式

python3 -m cppcheck_test_generator.main \
  --target /home/feng/test/math.c \
  --project-root /home/feng/test \
  --out ./enhanced_tests \
  --enhanced-analysis \
  --smart-max 5 \
  --auto-verify

输出文件结构

test_results/
├── cppcheck_report.xml          # 自动生成的 cppcheck 报告
├── issue_001_xxx.md             # 测试用例说明
├── issue_001_xxx.cpp            # 测试用例代码
├── issue_002_xxx.md
├── issue_002_xxx.cpp
├── vulnerability_verification_report.md  # 验证报告(如果启用 --auto-verify
└── verification_results.json    # 验证结果 JSON如果启用 --auto-verify

注意事项

  1. cppcheck 安装: 确保系统已安装 cppcheck

    # Ubuntu/Debian
    sudo apt-get install cppcheck
    
    # 或检查是否已安装
    which cppcheck
    
  2. 标准检测: 系统会自动根据文件扩展名检测 C/C++ 标准

    • .c, .hc99
    • .cpp, .hppc++17
    • 也可以手动指定 --cppcheck-std
  3. 报告路径: 如果使用 --target 且未指定 report 参数,报告会自动生成到 --out 目录下的 cppcheck_report.xml

  4. 性能: 对于大型项目,建议使用 --smart-select--smart-max 限制测试用例数量

与原有功能的兼容性

所有原有功能保持不变:

  • 仍然支持直接提供报告文件
  • 所有原有参数继续有效
  • 向后兼容,不影响现有脚本

故障排除

问题: "未找到 cppcheck 可执行文件"

解决: 安装 cppcheck 或确保其在 PATH 中

问题: "cppcheck 执行超时"

解决: 增加超时时间 --cppcheck-timeout 600

问题: "无法自动检测 C/C++ 标准"

解决: 手动指定 --cppcheck-std c99--cppcheck-std c++17

技术实现

  • 模块: cppcheck_test_generator/cppcheck_runner.py

  • 功能:

    • 自动查找 cppcheck 可执行文件
    • 运行 cppcheck 并捕获输出
    • 自动检测 C/C++ 标准
    • 生成 XML 格式报告
  • 集成点: cppcheck_test_generator/main.py

    • 新增 --target--run-cppcheck 参数
    • 自动调用 run_cppcheck() 函数
    • 无缝集成到现有工作流程