我使用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为基于细粒度控制传输的覆盖?
发布于 2018-04-23 03:00:17
好吧,我想出来了。
被检测的代码如下所示:
#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只将cov_c_xxx和cov_v_xxx链接到最终的结果链接列表中。cov_probe_v11是Bullseye运行时库的一部分。您可以修改它以适应正在测试的代码。
一旦链接到,所有其他数据收集就可以在不需要调用cov_probe_v11的情况下进行。
https://stackoverflow.com/questions/49918202
复制相似问题