TestCocoon官方主页可以通过Google搜索到。它是一款支持C++、c#的插桩工具,支持多种编译器,包括VC、Intel C++、GCC、G++等。并提供了执行结果显示的软件。
二、 基本流程
TestCocoon主要分为两个处理过程,插桩、结果展示。其中,插桩过程中会产生两个文件,一个是csmes文件,另一个是exe文件,csmes文件相当于一个描述信息文件,比如记录有哪些源码文件,以及某些exe输出信息代表什么含义等等,exe文件就是我们的可执行程序,是由插桩后代码生成的,通过运行该exe文件会生成一个记录执行过程的结果文件,csexe文件;当将csmes、csexe文件在结果浏览程序中打开后,就可以看到具体的覆盖率信息,代码的执行信息。
三、 TestCocoon的安装
我下载的版本是1.6.12,文件名为:TestCocoonSetup_1_6_12_x86.exe。
在安装该程序前,前确保VS已经安装成功。双击该安装程序,启动安装过程,安装过程中会弹出一个配置界面如下:
该配置页中,最关键的地方是选择IDE的类型,如果你的机子只装了一个版本的VS,那么这里应该是正确的,如果你安装了多个版本的VS,这里就需要你选择将要安装的IDE版本。
四、 简单使用
程序安装完成后,会在开始\程序菜单中添加TestCocoon菜单信息,首次使用我们需要首先运行菜单项Build Environment,这时会弹出多个环境选择,我选择的是VS2010项,这个部分与各位安装情况有关系,但问题应该不大。执行完成后,应该会进入如下界面状态:
这个时候输入cscl,会提示该命令的使用参数信息。
为了简单介绍,我写了一个简单的代码,代码如下:
#include <string>
#include <iostream>int main(int argc, char* argv[])
{
__coveragescanner_install(argv[0]);std::cout<<"Input X:";
std::cin>>x;
if(x<5)
k=5;
else if(x<10)
k=6;
else
k=7;
k = 8;
return 0;
}
该该代码文件置于cscl所在目录下,运行命令cscl --cs-on --cs-branch 代码文件名称,命令完成后,生成csmes文件和exe文件,当前还有其它文件,不用关心,运行exe文件,生成csexe文件,至于如何展示结果信息,这里不做介绍。
五、 VS中使用TestCocoon
虽然命令行下可以完成所有的事情,但对于一个习惯了IDE的人来说,还是太复杂了。TestCocoon提供了VS2005、VS2008、VS2010的插件,设置完成后,只要在待处理的工程或工作区上直接Build即可,非常方便。
我机子安装了VS2008、VS2010两个版本,VS2008是中文版,VS2010是英文版本,安装结果显示VS2008安装失败,原因在TestCocoon官方论坛上有讨论,但我们去深究,VS2010安装非常顺利,但首次使用发现没有效果。
我的操作过程如下:
首先,打开工具菜单下代码覆盖设置对话框,点击确定开启插桩处理按钮;
然后,在工程上点击Build;
编译正常,但结果不对,运行exe文件后,没有csexe文件生成。所以需要插桩错误原因,我在Output窗口中看到很多提示,说某些参数不能被识别,所以忽略,这些参数恰恰都是TestCocoon中cscl使用参数, 所以我怀疑TestCocoon的cl没有被调用到,打开工程属性查看目录信息,发现TestCocoon下的cl路径确实被设置了,并且会优先查找,那是什么原因?原因不清,所以我就试着先去掉了再重新编译,发现和刚刚结果一样,这也更验证我的猜想了,我再一次将目录设置回去,再重新编译,奇迹发生了,编译一切正常了。
最后,我猜想原因可能是默认的那个设置没有真正对工程起作用,而重新设置后才真正起作用了。