|
|
1
7
通常覆盖公用设施(如 gcov )与编译器一起提供。但是,请注意,他们通常只给你C0保险。即。
因此,即使您的测试显示100%的C0覆盖率,您也可能无法捕捉代码中的每一条路径——而且可能您没有时间去做(相对于分支,路径数呈指数增长)。但是,最好知道你是否有10%的c2或70%的c2(或0.1%的c2)。 |
|
|
2
2
通常,编译器会提供一个实用程序来进行这种代码覆盖率分析。例如,GCC具有 gcov 实用工具。 |
|
|
3
2
您需要一个代码覆盖计划(gcov、bulseye、dev partner)和单元测试(unittest++、cppunit等)。您编写的测试将测试该函数。
在这种情况下,单元测试不仅检查完整性(尽管它们仍然如此),而且还测试覆盖率。 |
|
4
1
尝试 SD C++ TestCoverage 对于VisualStudio兼容的测试覆盖率工具。我相信它实际上会告诉你关于 A?B:C 也是。 |
|
|
5
0
你可以使用 文件 和 线 预处理器指令:
只需将trace(msg)宏插入代码中要跟踪的位置,使用自定义消息,然后编写mytracenotify函数。
|
|
|
6
0
如果这意味着,换句话说,你不仅要寻找一组实际执行的代码点,而且要寻找一组以某种方式被“标记”的代码点,这些代码点可能会被执行以最终报告差异,那么我可能会 dangerous 解决方案。它适用于我的MSVC 2010和2013。 该方法是利用静态变量的预编程初始化初始化,但由于所有代码点都在函数中,因此,“静态ANKER点”必须以某种方式存在,因此,C++特性 delayed initialization of static function variables 必须克服。 这似乎可以通过一个带有静态成员变量(progloc_u)的模板类(x)添加一个间接寻址来强制每个模板参数的初始化,而这个模板参数又是一个包装结构,它传输所需的信息(u)。 文件 .“at line”, 线 .) 把这些放在一起,实现这一点的最重要的代码可能如下所示:
程序定位中使用的s_uuu线技巧来自 here on SO .
要跟踪,请使用以下内容:
也许这种方法有很多问题,我还没有看到,并使其适用于您的案例,正如其他人指出的,使用静态代码分析工具在大多数情况下是更好的解决方案。 编辑: 刚刚发现提供的解决方案已经在另一个上下文中讨论过: non-deferred-static-member-initialization-for-templates-in-gcc |