You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导入ctypes共享库时能否获取对应的代码覆盖率?

问题解答:ctypes加载共享库时的C代码覆盖率统计

结论

可以正常获取对应C代码的覆盖率信息。--coverage编译选项生成的覆盖率统计逻辑,和调用方的类型无关,不管是原生C可执行文件直接链接加载,还是Python通过ctypes动态加载共享库,只要库中的代码被执行,就能生成对应的覆盖率数据。

具体操作步骤

  • 编译C代码生成共享库时,编译和链接阶段都需要添加--coverage参数,示例编译命令如下:
# 编译生成目标文件
gcc -fPIC --coverage -c your_lib_source.c -o your_lib.o
# 链接生成共享库
gcc -shared --coverage your_lib.o -o mylib.so
  • 正常使用ctypes加载mylib.so,运行你编写的Python测试用例,调用共享库暴露的C接口
  • 等Python进程正常退出后,会在C代码的编译目录下生成后缀为.gcda的覆盖率数据文件
  • 使用gcov、lcov、gcovr等工具解析生成的gcda文件,即可得到完整的C代码覆盖率统计结果

常见注意事项

  • 运行Python测试脚本的用户,需要对C代码编译的目录有写权限,否则libgcov无法写入gcda文件,会出现无覆盖率数据的问题
  • 如果需要自定义gcda文件的输出路径,可以在运行Python脚本前设置GCOV_PREFIX和GCOV_PREFIX_STRIP环境变量调整输出位置,解决源文件路径不匹配的问题
  • 每次重新运行测试前建议删除旧的gcda文件,避免历史数据干扰最终的覆盖率统计结果

内容的提问来源于stack exchange,提问作者ayoubsvbri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:03