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
5.3 KiB
Cppcheck 集成使用指南
概述
项目现已集成 cppcheck 自动运行功能,可以:
- 自动运行 cppcheck 对项目进行静态分析
- 自动生成 XML 报告
- 自动读取报告并生成测试用例
- 自动验证生成的测试用例
快速开始
方式一:自动运行 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
执行步骤:
- ✅ 自动运行 cppcheck 检查
math.c - ✅ 自动生成 XML 报告到
./complete_test/cppcheck_report.xml - ✅ 解析报告并过滤问题
- ✅ 生成测试用例(最多 5 个)
- ✅ 自动验证所有测试用例
- ✅ 生成验证报告
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)
注意事项
-
cppcheck 安装: 确保系统已安装 cppcheck
# Ubuntu/Debian sudo apt-get install cppcheck # 或检查是否已安装 which cppcheck -
标准检测: 系统会自动根据文件扩展名检测 C/C++ 标准
.c,.h→c99.cpp,.hpp→c++17- 也可以手动指定
--cppcheck-std
-
报告路径: 如果使用
--target且未指定report参数,报告会自动生成到--out目录下的cppcheck_report.xml -
性能: 对于大型项目,建议使用
--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()函数 - 无缝集成到现有工作流程
- 新增