程序代码覆盖率分析
程序代码覆盖率分析主要分为以下几步:
右击需要分析的工程,选择菜单 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 。
内核模块代码覆盖率分析与应用程序基本一致,不一样的是内核模块不能像 APP 程序那样直接被执行,需运行 modulegcov 命令生成 源文件名 .gcda 文件。
其操作流程如下:
模块中添加如下代码。
extern void __gcov_flush(); LW_SYMBOL_EXPORT void module_gcov (void) { __gcov_flush(); printk("module_gcov() run!\n"); }
按照下图设置工程,编译并下载内核模块文件到目标系统,注册模块并执行
modulegcov
命令,生成源文件名 .gcda
文件,如下图所示。右击需要分析的工程,选择 SylixOS Coverage Analysis > Show Coverage Rate 。至此,每个源文件会在程序工程编译输出目录下的 obj 文件夹中都存在三个与之对应的文件,即:
源文件名 .o
,源文件名 .gcno
和源文件名 .gcda
。选择过工程目标文件后即可查看代码覆盖率分析结果。在 gcov 标签页中可查看源文件代码覆盖率,双击列表中的行可定位到源代码,同时在源码文件中以不同的颜色标识各行代码的执行次数。选中某一行,单击,选择 Bar graph ,可以更直观的查看代码覆盖率分析图,如下图所示。