gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:32:56 25 4
gpt4 key购买 nike

我正在使用 Bullseye 对一些 C 代码进行代码覆盖率测试。我成功地用 Bullseye 检测了我的 C 代码。然后我尝试将其拆开,看看里面有什么。

我期望在每个控制传输位置都插入一些探测函数。比如forifwhile等。但令我惊讶的是,我只看到开头有一个探针我的每个功能。比如这个:

enter image description here

那么这个单一探针如何跟踪所有控制传输呢?

当我查看收集的覆盖数据时,我所有的控制权转移都被记录为未覆盖。只有函数入口点被记录为被覆盖。

我是否错误配置了 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"
};

...

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 .

关于使用 BullsEye 进行代码覆盖率测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49918202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com