Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用BullsEye进行代码覆盖率测试_C_Code Coverage_Bullseye - Fatal编程技术网

C 用BullsEye进行代码覆盖率测试

C 用BullsEye进行代码覆盖率测试,c,code-coverage,bullseye,C,Code Coverage,Bullseye,我正在使用Bullseye对一些C代码进行代码覆盖率测试。 我成功地用Bullseye插入了我的c代码。然后我试着把它拆开看看里面有什么 我希望在每个控制传输位置插入一些探测函数。例如for,if,while,等等。但令我惊讶的是,我在每个函数的开头只看到一个探针。比如这个: 那么,单探针如何跟踪所有的控制传输呢 当我查看收集的覆盖率数据时,我的所有控制传输都记录为未覆盖。只有函数入口点被定义为覆盖 我是否错误配置了Bullseye,因此上面的屏幕截图只是粗略的功能覆盖范围?如果是这样,我如何

我正在使用Bullseye对一些C代码进行代码覆盖率测试。 我成功地用Bullseye插入了我的c代码。然后我试着把它拆开看看里面有什么

我希望在每个控制传输位置插入一些探测函数。例如
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)));