仓颉覆盖率统计工具 cjcov。当需要了解如何使用 cjcov 生成仓颉程序的代码覆盖率报告,包括编译选项(--coverage)、生成 HTML/XML/JSON 报告、分支覆盖率、源文件过滤(include/exclude)、与 cjpm 集成等,应使用此 Skill。
cjcov(Cangjie Coverage)用于生成仓颉程序的覆盖率报告,支持行覆盖率和分支覆盖率,输出 HTML、XML、JSON 格式。
# 1. 使用 --coverage 编译
cjc --coverage main.cj
# 2. 运行生成 .gcda 数据
./main
# 3. 生成 HTML 覆盖率报告
cjcov -o output --html-details
cjpm build --coverage # 编译带覆盖率
cjpm test --coverage # 测试带覆盖率
cjcov -o output --html-details
| 选项 | 说明 |
|---|
-h / --help | 显示帮助 |
-v / --version | 显示版本号 |
-r ROOT / --root=ROOT | gcda/gcno 文件所在根目录(默认当前目录) |
-o OUTPUT / --output=OUTPUT | 报告输出目录(默认当前目录) |
--html-details | 生成每个源文件的子 HTML 报告 |
-x / --xml | 生成 coverage.xml |
-j / --json | 生成 coverage.json |
-b / --branches | 生成分支覆盖率(实验性功能) |
-k / --keep | 保留 gcov 中间文件 |
-s SOURCE / --source=SOURCE | 源文件路径(用于 HTML 中的相对路径) |
-e EXCLUDE / --exclude=EXCLUDE | 排除指定路径的文件 |
-i INCLUDE / --include=INCLUDE | 仅包含指定路径的文件 |
--verbose | 输出详细解析日志 |
cjcov --root=./ -o html_output --html-details
生成 index.html(总览)和每个源文件对应的子 HTML。
cjcov --root=./ -o report_dir -x
# 排除测试目录
cjcov --root=./ -e "/path/to/tests" --html-details -o output
# 仅包含指定文件
cjcov --root=./ -i "/path/to/src/main.cj /path/to/src/utils" --html-details -o output
cjcov -b --html-details -o output
foreign)、枚举类型定义、class/extend 定义行cjc --test 编译时,源码中的 main 函数不会被执行覆盖try-catch-finally、循环、if-else 场景可能不精确gdb 脚本(p exit(0))使进程正常退出以生成 gcda 数据gcov 中间文件不删除会导致执行次数累加,建议默认删除(不加 -k)| 问题 | 解决方案 |
|---|---|
找不到 llvm-cov | 设置 CANGJIE_HOME 环境变量,或手动安装 llvm-cov |
OutOfMemoryError | 增大堆内存:export cjHeapSize=2GB |