静态库(.lib)Visual Studio的代码覆盖范围

code coverage for static library(.lib) visual studio

本文关键字:代码 覆盖 范围 Studio Visual lib 静态      更新时间:2023-10-16

我有一个静态库(.lib)。我的测试项目中的测试用例位于Visual Studio中,TCS是指许多静态库功能。测试用例有效,一切都很好。但是我无法获得内部代码的代码覆盖。有没有办法获得.lib的代码覆盖?

如果您具有静态库的源代码,则可以使用当前的测试项目来测试LIB中的功能。只需将您的测试项目与在Visual Studio中生成库的项目相结合。如果您没有源代码,则可以设计测试用例以执行此lib的黑盒测试。

我对我的工作做了很多实验,并且是观察结果。代码仪器在编译时起作用。意味着当编译代码时,也正在仪器。因此,对于基于GCC的仪器,--ftest-coverage--fprofile-arcs标志在此处出现。汇编完成后链接静态库,因此没有得到仪器。由于没有得到仪器,因此没有生成数据。

因此,下一个逻辑步骤我还启动了库代码,对其进行了编译,然后从该乐器代码中生成了静态库。现在,正如我所理解的那样,静态库是使用称为ar的应用程序工具制成的,在我的IDE中,该工具会自动使用.o文件。以前是一个非仪器对象文件。现在,在仪器期望之后,静态库中的数据也应与库中的每个文件刷新。但这没有发生。这也意味着两件事之一1- .gcno文件也需要添加其或2-只有编译的文件才能生成配置文件数据。

现在,我下一步是修改这个静态库构建步骤,并进行了以下更改。我的原始行是ar rcs libmylib.a mylib.o,我将其更改为ar rcs libmylib.a mylib.gcno。基本上将GCNO文件包括在显然无法使用的静态库中。但仍然给它拍摄。

接下来我添加了 .o和`gcno''都包含在静态库中。令人惊讶的是,应用程序没有错误,但没有生成配置文件数据。这使我相信,仅针对应用程序中编译的文件而不是链接的文件生成配置文件数据。

我进行的最后一次尝试是,而不是将其链接为静态库存档,而是将对象文件直接连接到应用程序中。mylib.o。这已经是一个仪器的对象。但是,在链接时间再次添加了已经仪器的对象。因此,直到您的代码在编译时间中存在,该理论是从中生成的。

我不确定动态链接库。但是上面是我从我执行的实验中观察到的。