编译代码的代码覆盖率
Numba 是一个针对 Python 的即时编译器,它将 Python 代码转换为机器代码以优化执行。然而,这个过程对传统的代码覆盖率工具提出了挑战,因为它们通常在 Python 解释器中运行,因此会遗漏 Numba 编译的代码行。为了解决这个问题,Numba 选择在编译时而不是在执行期间向覆盖率工具发送通知,以最大程度地减少性能损失。这种方法有助于防止使用 Numba 的项目出现显著的覆盖率缺失,同时避免产生大量的性能开销。
生成编译时代码覆盖率数据无需额外工作。通过在 coverage
工具(例如 coverage run ...
)下运行 Numba 应用程序,编译器会自动检测到活动的覆盖率会话并相应地发出数据。这种机制确保了覆盖率数据的无缝生成,无需手动干预。
覆盖率数据在降低(lowering)阶段发出,该阶段涉及 LLVM-IR 的生成。这个阶段本身会排除被静态识别为死代码的代码行,从而确保覆盖率数据准确反映可执行的代码路径。