首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用BullsEye进行代码覆盖测试

用BullsEye进行代码覆盖测试
EN

Stack Overflow用户
提问于 2018-04-19 10:00:55
回答 1查看 791关注 0票数 1

我使用Bullseye作为代码覆盖测试的一些C代码。我成功地用Bullseye测试了我的c代码。然后我试着拆开它看看里面有什么。

我原以为应该在every control transfer location中插入一些探测函数。比如forifwhile等等,但令我惊讶的是,我只看到了a single probe at the the beginning of each of my functions。比如这个:

那么,这个单一的探测器如何跟踪所有的控制传输呢?

当我查看收集到的覆盖数据时,我所有的控制传输都被记录为没有覆盖。只有函数入口点被罗列为覆盖点。

我是否错误地配置了Bullseye,所以上面的屏幕截图只是粗略的function coverage?如果是这样的话,我如何配置Bullseye为基于细粒度控制传输的覆盖?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 03:00:17

好吧,我想出来了。

被检测的代码如下所示:

代码语言:javascript
复制
#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"
};

..。

代码语言:javascript
复制
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_xxxcov_v_xxx )分别存储在.covconst.covbss段中。在运行时,被检测的代码日志数据指向cov_v_xxx对象。

函数条目处调用的cov_probe_v11只将cov_c_xxxcov_v_xxx链接到最终的结果链接列表中。cov_probe_v11是Bullseye运行时库的一部分。您可以修改它以适应正在测试的代码。

一旦链接到,所有其他数据收集就可以在不需要调用cov_probe_v11的情况下进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49918202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档