gpt4 book ai didi

code-coverage - 如何使用 Cython 进行覆盖分析

转载 作者:行者123 更新时间:2023-12-04 15:55:33 25 4
gpt4 key购买 nike

我正在尝试使用 pytest-cov 对某些 Cython 代码运行覆盖率分析。和工作服.io。我已经构建了启用跟踪的扩展模块,并在以下链接的帮助下运行了分析:

http://docs.cython.org/src/tutorial/profiling_tutorial.html

http://blog.behnel.de/posts/coverage-analysis-for-cython-modules.html

但是,我得到了一些我无法解释的结果。似乎很多def/cdef/cpdef尽管代码中的代码正常,但代码中的行显示为未运行。结果甚至不一致,因为有些行看起来不错。

示例报告:https://coveralls.io/files/1871744040

我不知道我是否说错了什么,这是否是一个错误,或者我只是没有正确解释结果。

coveralls screenshot

在上面的示例中,get_cost方法看起来不错,但是 __set__尽管函数中的行已被调用,但不会调用上述属性的方法。

更新:似乎问题出在 Cython 类上。如果类是用 def 定义的而不是 cdef问题消失了。我想这还没有完全支持。

最佳答案

如果 Cython 跟踪工具似乎没有按预期工作,应该可以使用 gcov用于 cython 代码的覆盖率分析。这样就可以验证生成的 C 代码的某行是否被执行。

用一个简单的 main.pyx

import mymod

def main():
mymod.test()

和 mymod.pyx
def test():
return 42

进而
cython --embed main.pyx
cython mymod.pyx

gcc -O1 -fPIC -fprofile-arcs -ftest-coverage -Wall -I/usr/include/python2.7 -c -o main.o main.c
gcc main.o -fprofile-arcs -lpython2.7 -lgcov -o main
gcc -O1 -fPIC -fprofile-arcs -ftest-coverage -Wall -I/usr/include/python2.7 -c -o mymod.o mymod.c
gcc -shared mymod.o -fprofile-arcs -lgcov -lpython2.7 -o mymod.so

创建了一个可执行文件。执行后 ./main main.gcda 和 mymod.gcda 是为 gcov 创建的。

关于code-coverage - 如何使用 Cython 进行覆盖分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34935796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com