C 用BullsEye进行代码覆盖率测试
我正在使用Bullseye对一些C代码进行代码覆盖率测试。 我成功地用Bullseye插入了我的c代码。然后我试着把它拆开看看里面有什么 我希望在每个控制传输位置插入一些探测函数。例如C 用BullsEye进行代码覆盖率测试,c,code-coverage,bullseye,C,Code Coverage,Bullseye,我正在使用Bullseye对一些C代码进行代码覆盖率测试。 我成功地用Bullseye插入了我的c代码。然后我试着把它拆开看看里面有什么 我希望在每个控制传输位置插入一些探测函数。例如for,if,while,等等。但令我惊讶的是,我在每个函数的开头只看到一个探针。比如这个: 那么,单探针如何跟踪所有的控制传输呢 当我查看收集的覆盖率数据时,我的所有控制传输都记录为未覆盖。只有函数入口点被定义为覆盖 我是否错误配置了Bullseye,因此上面的屏幕截图只是粗略的功能覆盖范围?如果是这样,我如何
for
,if
,while
,等等。但令我惊讶的是,我在每个函数的开头只看到一个探针。比如这个:
那么,单探针如何跟踪所有的控制传输呢
当我查看收集的覆盖率数据时,我的所有控制传输都记录为未覆盖。只有函数入口点被定义为覆盖
我是否错误配置了Bullseye,因此上面的屏幕截图只是粗略的功能覆盖范围
?如果是这样,我如何配置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"
};
因此本质上,它将一些覆盖率数据收集器对象,cov__xxx
和cov_xxx
分别存储在.covconst
和.covbss
段中。在运行时,插入指令的代码日志数据指向cov_v_xxx
对象
在函数条目处调用的cov_probe_v11
仅将cov_xxx
和cov_xxx
链接到最终结果链接列表中。cov\u probe\u v11
是Bullseye运行库的一部分。您可以修改它以适应测试中的代码
一旦链接,无需调用cov_probe_v11
即可进行所有其他数据采集
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)));