AQtime代码覆盖率深度分析之二

来源:互联网 发布:arashi smap 地位知乎 编辑:程序博客网 时间:2024/05/17 00:07

AQtime的Coverage Profiler有一些不错的特性,能方便我们更好的进行代码覆盖率的检测。

New Area和 Files to Ignore

当目标module被加进来是,AQtime会以树形结构,把module的对象层次图显示出来,如c/c++的dll,就会dll-->obj-->API三个层次。如果我们只想对特定的obj文件进行profile,或者排除编译时编译工具加入了自己的obj文件(因为这些obj文件会影响最终的结果,也无需对他们进行profile),就需要用到New Area这个功能:

展开dll到obj这个层次的视图,选中自己的obj文件,右键-->Add Selected to Area-->Add to New Area...,这样就可以按line level或routine level,只针对自己想要obj文件,也就是只profile完全是自己程序的代码。记得只选中新建的这个area。

同时,如果这些你的程序中也调用了其他人写的函数库,可以找到这些函数库文件的完整路径名,在AQtime的菜单栏Options-->Files to Ignore...,把他们加入到需要忽略的文件列表中。注意,这里是一个全局选项,对所有的project都有效的。这里加的文件越多,AQtime启动coverage profile所需的时间就越长,甚至会造成假死的现象。

通过建New Area和Files to Ignore选项,就可以只针对特定的代码进行coverage profile。

Mark partially executed lines as

AQtime提供一个选项,叫做"Mark partially executed lines",该选项的值设置不同,会影响到最终的line coverage的结果。默认情况下,AQtime是把该选项设为"Partially executed (yellow dot)"的。选择Add or Remove Buttons-->Customize-->Commands,可以把该选项显示的添加到AQtime的菜单栏。

为什么该选项的值不同会影响line coverage的结果呢?因为对于if(condition1 || condition2)等这样的语句,AQtime会根据该选项的值,认为该行具有1个还是2个hit block。

First chance exception 0xxxxx

当设置好工程后,执行coverage profile任务,在event view中,可以看到一些"First chance exception ...."的信息,并且前面有个大红叉。给人第一感觉就会怀疑是否程序中有重大的问题。其实通常情况下不是这样的,它是告诉我们有一个异常被引发并且被处理了,具体可见http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx

Merge

AQtime提供对结果的merge功能,一是可以对不同的测试任务的coverage进行集成,二则对于AQtime本身而言,个人任务意义更为巨大,因为AQtime对一个比较大一点的,时间比较长的任务,有时候会crash,这个时候就很悲催了。这种情况下,我们最好把大的,时间长的任务分割为几个比较小的,分别执行,最后在合并。在合并之前,最好copy一份保存有结果的工程。如果在合并的时候,还是出现了crash的对话框,千万不要选择“terminate the application..."这个选项,否则会因为debug info的丢失,所有的之前profile的结果都没有了。

Top 10 uncovered routines

在summary中,总的和每个thread都有一个"Top 10 uncovered routines"和"Routines with max HitCount",”Routines with max HitCount"好理解,就是比较谁hit的次数多;但是对于uncovered,就有些费解,开始以为是AQtime基于代码的静态分析函数调用关系得出的,问了AQtime support的人,结果完全不是这样的。AQtime会根据coverage的百分比进行自动排序,hit最高的当然就是max hitcount了,而"Top 10 uncovered",则是hitcount都为0的routine中,随机产生的。

 

 

原创粉丝点击