【问题标题】:Code coverage test with BullsEyeBullsEye 的代码覆盖率测试
【发布时间】:2023-03-04 00:54:01
【问题描述】:

我正在使用 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 以实现基于控制传输的细粒度覆盖?

【问题讨论】:

    标签: c code-coverage bullseye


    【解决方案1】:

    好的,我想通了。

    检测代码如下所示:

    #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)));
    

    本质上,它在.covconst.covbss 段中分别存储了一些覆盖数据收集器对象cov_c_xxxcov_v_xxx。在运行时,检测代码日志数据指向cov_v_xxx 对象。

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

    一旦链接,所有其他数据收集都可以发生,而无需调用cov_probe_v11

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多