程序代码覆盖率分析主要分为以下几步:
- 右击需要分析的工程,选择菜单
“Properties”
,选择“SylixOS Project”
下的“Compiler Setting”
,在弹出的窗口中勾选“Enable gcov(Code coverage analysis)”
,“OK”
保存设置。
- 编译程序,在工程编译输出目录的 obj 文件夹下会为被编译的每个源文件生成
“源文件名.o”
和“源文件名.gcno”
文件。
- 上传应用程序可执行文件(本例为
“app_demo”
)到目标设备并执行文件,程序退出后
在可执行文件同级目录下会生成obj
目录,该目录中保存了每个源文件在程序执行后生成的
“源文件名.gcda”
文件。
- 右击需要分析的工程,选择
“SylixOS Coverage Analysis→Show Coverage Rate”
。
至此,每个源文件在程序工程编译输出目录下的obj
文件夹中存在三个与之对应的文件,即:
“源文件名.o”
,“源文件名.gcno”
和“源文件名.gcda”
。在gcov
标签页中可查看源文件代码
覆盖率,双击列表中的行可定位到源代码,同时在源码文件中以不同的颜色标识各行代码的
执行次数。选中列表中的“app_demo.c”
一行,点击 ,选择“Bar graph”
,可以更直观的
查看代码覆盖率分析图。
注:如果更改了源文件,在第四步中需要先选择“SylixOS Coverage Analysis→Get Coverage Rate File”
,再选择“SylixOS Coverage Analysis→Show Coverage Rate”
内核模块代码覆盖率分析与应用程序基本一致,不一样的是内核模块不能被执行,需运
行“modulegcov”
命令生成“源文件名.gcda”
文件。其操作流程如下:
- 模块中添加如下代码。
extern void __gcov_flush();
LW_SYMBOL_EXPORT void module_gcov (void)
{
__gcov_flush();
printk("module_gcov() run!\n");
}
- 按照图 7.2 设置工程,编译并下载内核模块文件到目标系统,注册模块并执行
“modulegcov”
命令,生成“源文件名.gcda”
文件。
- 右击需要分析的工程,选择
“SylixOS Coverage Analysis→Show Coverage Rate”
。至此,
每个源文件会在程序工程编译输出目录下的obj
文件夹中都存在三个与之对应的文件,即:
“源文件名.o”
,“源文件名.gcno”
和“源文件名.gcda”
。选择过工程目标文件后即可查看代
码覆盖率分析结果。在gcov
标签页中可查看源文件代码覆盖率,双击列表中的行
可定位到源代码,同时在源码文件中以不同的颜色标识各行代码的执行次数。选中某一行,
点击 ,选择“Bar graph”
,可以更直观的查看代码覆盖率分析图。