使用 BullsEye 进行代码覆盖率测试
Code coverage test with BullsEye
我正在使用 Bullseye 对一些 C 代码进行代码覆盖率测试。
我成功地使用 Bullseye 检测了我的 C 代码。然后我试着拆开看看里面有什么
我期待在 every control transfer location
处插入一些探测函数。比如for
、if
、while
等。但是令我惊讶的是,我只看到了a single probe at the the beginning of each of my functions
。比如这个:
那么这个单一的探测器如何追踪所有的控制传输?
当我查看收集到的覆盖率数据时,我所有的控制转移都被记录为未覆盖。只有函数入口点被记录为已覆盖。
我是否错误配置了 Bullseye,所以上面的屏幕截图只是粗略的 function coverage
?如果是这样,我如何配置 Bullseye 以实现基于控制传输的细粒度覆盖?
好的,我明白了。
检测代码如下所示:
#pragma bss_seg(push,".covbss")
static struct cov_V_d934b203 cov_v_d934b203;
#pragma bss_seg(pop)
#pragma const_seg(push,".covconst")
static const struct cov_O_d934b203 cov_o_d934b203 = {
0x5a6b7c8d, 0x6b54972d, &cov_v_d934b203, 0x254972d, cov_V_d934b203_n, "CpuPeimTest.obj 21Apr18 22:20"
};
...
if(!cov_v_d934b203.data[0])cov_probe_v11(&cov_o_d934b203,0);{ // this is right after the function entry.
do { if (DebugPrintEnabled ()) { do { if (DebugPrintLevelEnabled (0x80000000)) { DebugPrint (0x80000000,"Ming: Code coverage test start.\n"); } } while (((BOOLEAN)(0==1))); } } while (((BOOLEAN)(0==1)));
所以本质上,它存储了一些覆盖率数据收集器对象,cov_c_xxx
和 cov_v_xxx
,分别在 .covconst
和 .covbss
段中。在运行时,检测代码日志数据指向 cov_v_xxx
对象。
cov_probe_v11
在函数入口处调用 只是 link cov_c_xxx
和 cov_v_xxx
进入最终结果 link 列表。 cov_probe_v11
是 Bullseye 运行时库的一部分。您可以对其进行修改以适应您的测试代码。
一旦 linked,所有 other 数据收集都可以在不需要调用 cov_probe_v11
.
我正在使用 Bullseye 对一些 C 代码进行代码覆盖率测试。 我成功地使用 Bullseye 检测了我的 C 代码。然后我试着拆开看看里面有什么
我期待在 every control transfer location
处插入一些探测函数。比如for
、if
、while
等。但是令我惊讶的是,我只看到了a single probe at the the beginning of each of my functions
。比如这个:
那么这个单一的探测器如何追踪所有的控制传输?
当我查看收集到的覆盖率数据时,我所有的控制转移都被记录为未覆盖。只有函数入口点被记录为已覆盖。
我是否错误配置了 Bullseye,所以上面的屏幕截图只是粗略的 function coverage
?如果是这样,我如何配置 Bullseye 以实现基于控制传输的细粒度覆盖?
好的,我明白了。
检测代码如下所示:
#pragma bss_seg(push,".covbss")
static struct cov_V_d934b203 cov_v_d934b203;
#pragma bss_seg(pop)
#pragma const_seg(push,".covconst")
static const struct cov_O_d934b203 cov_o_d934b203 = {
0x5a6b7c8d, 0x6b54972d, &cov_v_d934b203, 0x254972d, cov_V_d934b203_n, "CpuPeimTest.obj 21Apr18 22:20"
};
...
if(!cov_v_d934b203.data[0])cov_probe_v11(&cov_o_d934b203,0);{ // this is right after the function entry.
do { if (DebugPrintEnabled ()) { do { if (DebugPrintLevelEnabled (0x80000000)) { DebugPrint (0x80000000,"Ming: Code coverage test start.\n"); } } while (((BOOLEAN)(0==1))); } } while (((BOOLEAN)(0==1)));
所以本质上,它存储了一些覆盖率数据收集器对象,cov_c_xxx
和 cov_v_xxx
,分别在 .covconst
和 .covbss
段中。在运行时,检测代码日志数据指向 cov_v_xxx
对象。
cov_probe_v11
在函数入口处调用 只是 link cov_c_xxx
和 cov_v_xxx
进入最终结果 link 列表。 cov_probe_v11
是 Bullseye 运行时库的一部分。您可以对其进行修改以适应您的测试代码。
一旦 linked,所有 other 数据收集都可以在不需要调用 cov_probe_v11
.