其他IDE和工具链支持
本章介绍了专用IDE和构建系统,它们大多用于嵌入式系统。
CygWin
安装适用于 GCC 和 G++ 的 CoverageScanner 编译器包装器 CygWin
- 打开 构建环境选择 应用程序 (<Windows Coco>
\toolselector.exe
). - 选择 CygWin - www.cygwin.com 项。
- 点击 安装 CygWin 支持。此时,构建环境选择对话框将显示生成的编译器包装器列表。
然后打开 CygWin 控制台,并用 csgcc
(而不是 gcc
) 来编译您的应用程序 (或用 csg++
代替 g++
)。
Scratchbox
如果 Coco 安装在根文件系统中,将为 Scratchbox 支持的每个编译器创建一个编译器包装器。要调用 CoverageScanner,请向交叉编译器的名称前添加 cs
。
注意:安装选项:1) 在本地计算机上安装(需要root权限)
。
TI C6000 CGT6
没有标准位置可以安装此编译器。但是,TI 编译器的 Coco 包装器安装在 %squishcoco%\TI
。
要为使用 TI cl6x 编译器构建的程序进行instrumentation,您必须
- 将 Coco 编译器包装器添加到您的路径(在真实编译器之前),或者
- 运行 构建环境选择,它会在给定 TI 编译器的安装位置时,将原始的可执行文件移动到不同的目录,并在原始位置放置包装器。
在第二种方法中,除非将 --cs-on
作为命令行参数传递或在 COVERAGESCANNER_ARGS
环境变量中找到,否则包装器会简单地传递命令行参数到底层编译器。
安装 TI C6000 cl6x 工具链的 CoverageScanner 编译器包装器
- 打开 构建环境选择 应用程序(%squishcoco%
\toolselector.exe
)。 - 选择项目 TI CGT 6。
- 选择 TI CGT 6 编译器安装的目录(例如,
C:\Desktop\TI
)。 - 点击 安装 TI 支持 并等待工具生成的确认。
Synopsys Metaware Designware ARC
在 构建环境选择 中目前还没有对 Metaware 编译器的支持,所以不要在这里寻找 Metaware。不过,Squish Coco 为 2 个 Metaware 编译器提供了包装器:ccac
和 arac
。
在 Windows 上安装 Metaware 编译器后,将定义一个环境变量 METAWARE_ROOT
,并将编译器安装在该目录下。安装程序会将以下目录添加到您的 PATH
中:%METAWARE_ROOT%\arc\bin;%METAWARE_ROOT%\ide
。
为了能够对您的构建进行调试,请将 Coco Metaware 包装器的目录添加到您的 PATH
之前。如果您正在使用命令行,它看起来像这样
set PATH=%squishcoco%\Metaware;%PATH%
要使用我们的编译器包装器之一对程序进行调试,请将 --cs-on
和任何其他您喜欢的覆盖率扫描器参数添加到环境变量 COVERAGESCANNER_ARGS
中。
set COVERAGESCANNER_ARGS=--cs-on --cs-mcdc
之后,您可以从命令行运行 gmake
来构建您的应用程序,您应该会得到一个调试版本的构建。
或者,从 Metaware IDE 中,您可以从 项目 - 属性 - C/C++ 构建 - 环境 中设置这些环境变量。
要设置项目的代码覆盖率,请转到 管理配置 - 新建 并创建一个名为 CodeCoverage
的新配置。选择它,并将其设置为 活动。
接下来,在 环境 部分设置 PATH
和 COVERAGESCANNER_ARGS
。
之后,IDE 应该能够构建项目的调试版可执行文件。
如果您不再需要代码覆盖率,请切换回之前的构建配置之一。
ARM Keil μVision
为了启用代码覆盖率分析,使用 Coco ARM 编译器包装器编译项目并在编译过程中启用代码覆盖率分析
- 为您使用的 ARM® Keil® μVision 工具链安装 CoverageScanner 编译器包装器
- 打开 构建环境选择 应用程序(<Windows Coco>
\toolselector.exe
)。 - 选择项目 ARM-Keil。
- 选择 ARM Keil μVision 编译器安装的目录(例如,
C:\Keil_v5\ARM
)。 - 点击 安装 ARM-Keil 支持 并等待工具生成的确认。
- 打开 构建环境选择 应用程序(<Windows Coco>
- 在编译过程中启用代码覆盖率分析
- 点击 项目 > 目标选项。
- 在 C/C++ 选项卡上,将
--cs-on
添加到 其他控制 字段中。 - 在 链接器 选项卡上,将
--cs-on
添加到 其他控制 字段中。
Arm DS
要启用 Arm DS 项目的代码覆盖率分析,使用 Coco ARM 编译器包装器编译它并在编译过程中启用代码覆盖率分析
- 为 Arm DS 工具链安装 CoverageScanner 编译器包装器
- 打开 构建环境选择 应用程序(<Windows Coco>
\toolselector.exe
)。 - 选择项目 ARM-DS。
- 选择 Arm DS 编译器安装的目录(例如,
C:\Program Files\DS-5 v5.29.3
)。 - 点击 安装ARM-DS支持 并等待确认工具已生成。
- 打开 构建环境选择 应用程序(<Windows Coco>
- 在编译过程中启用代码覆盖率分析
- 点击 项目 > 属性。
- 在 Arm C/C++ 编译器 5 选项卡中,将
--cs-on
添加到 其他 字段。 - 在 Arm 链接器 5 选项卡中,将
--cs-on
添加到 其他控制 字段。
要将目标上的覆盖率数据上传到主机,定义一些自定义I/O函数并通过调用 __coveragescanner_save()
触发覆盖率生成。由于Arm DS支持半宿主扩展,最简单的方法是直接在主机文件系统中生成执行报告。
为此,修改 main()
函数以添加对 __coveragescanner_set_custom_io()
、__coveragescanner_filename()
和 __coveragescanner_save()
的调用,如下面的示例所示。
#include <stdio.h> #ifdef __COVERAGESCANNER__ static int csfputs(const char *s, void *stream) { return fputs(s, (FILE *)stream); } static void *csfopenappend(const char *path) { return (void*)fopen(path,"a+"); } static int csfclose(void *fp) { return fclose((FILE*)fp); } #endif int main() { #ifdef __COVERAGESCANNER__ __coveragescanner_set_custom_io( NULL, csfputs, csfopenappend, NULL, NULL, csfclose, NULL); __coveragescanner_filename( "c:\\tmp\\test_arm5_csexe" ); /* destination file on the host file system */ #endif ....... #ifdef __COVERAGESCANNER__ __coveragescanner_save(); /* saves the execution report */ #endif return 0; }
现在可以重新构建项目,并生成一个扩展名为 .afx.csmes
的项目文件。此文件可以在 CoverageBrowser 中打开。然后执行目标应用程序,直到调用 __coveragescanner_save()
。将生成一个文件 c:\tmp\test_arm5_csexe
(在我们的示例中为硬编码)。使用 CoverageBrowser 作为以下屏幕截图导入和分析它。
Arm DS项目的代码覆盖率
注意:执行报告的扩展名通常是 .csexe
,但ARM提供的半宿主实现去掉了文件扩展名。要导入它,有必要在 CoverageBrowser 的导入对话框中删除默认文件过滤器。
Green Hills Software MULTI 加载器
安装
为Green Hills® Software工具链安装CoverageScanner编译器包装器
- 打开 构建环境选择 应用程序(<Windows Coco>
\toolselector.exe
)。 - 选择 Green Hills 选项。
- 选择安装Green Hills Software编译器的目录。
- 点击 安装Green Hills支持 并等待确认工具已生成。
命令行工具
Green Hills Software编译器的命令行工具安装在每个已安装本机工具链的 squishcoco
文件夹中。例如,如果本机工具链安装在 c:\ghs\comp_201426
下,则Coco编译器包装器安装在每个已安装本机工具链的 c:\ghs\comp_201426\squishcoco
下。
编译器包装器完全替代了Green Hills Software工具链。要激活代码覆盖率分析,请将参数 --cs-on
添加到编译器参数。
覆盖率扫描器库
要保存执行报告
- 向 CoverageScanner 库提供一个列表,其中包含允许您将覆盖率信息上传到主机的I/O函数。
- 在特定触发器下手动保存覆盖率报告。
要保存覆盖率报告,请使用以下代码片段(将此代码添加到应触发报告生成的事件处理器中)
#ifdef __COVERAGESCANNER__ __coveragescanner_save(); __coveragescanner_clear(); #endif
要提供I/O函数,请在应用程序的 main()
函数中调用 __coveragescanner_set_custom_io()
。至少需要通过 __coveragescanner_set_custom_io()
提供三个函数
- 与
fopen()
等效的功能,用于以追加模式打开执行报告文件(扩展名为.csexe
) - 与
fclose()
等效的功能。 - 与
fputs()
等效的功能,用于传输内容。
例如,以下代码使用C文件API将执行报告写入本地文件系统。
#ifdef __COVERAGESCANNER__ static int csfputs(const char *s, void *stream) { return fputs(s, (FILE *)stream); } static void *csfopenappend(const char *path) { return (void*)fopen(path,"a+"); } static int csfclose(void *fp) { return fclose((FILE*)fp); } #endif int main() { #ifdef __COVERAGESCANNER__ __coveragescanner_set_custom_io( NULL, csfputs, csfopenappend, NULL, NULL, csfclose, NULL); #endif .... }
QNX Software Momentics IDE
安装
安装 QNX® 软件工具链的 CoverageScanner 编译器包装器
- 打开 构建环境选择 应用程序(<Windows Coco>
\toolselector.exe
)。 - 选择项 QNX。
- 选择已安装 QNX 软件工具链的目录。默认情况下,它为
c:\Users\<account>\qnx700
。 - 点击 安装 QNX 支持 并等待确认工具生成。
配置
安装过程完成后,激活和配置所选构建模式下的 Coco 参数。或者创建一个仅为代码覆盖率而设的专用模式,这是更好的实践。
QNX Software 7.0
按以下步骤操作
- 打开 QNX Momentics IDE。
- 加载要测量的项目。
- 使用菜单 项目 > 属性 打开项目的首选项。
- 选择 C++ 构建工具 > 环境 并添加变量
COVERAGESCANNER_ARGS
,其值为--cs-on
。您还可以指定其他设置。例如,要启用 MC/DC 测量,请添加--cs-mcdc
。 - 重新构建项目以在您的构建文件夹中找到测量数据库
<project_name>.csmes
。然后,您可以执行您的应用程序并将生成的.csexe
文件导入其中。
QNX Software 7.1
按以下步骤操作
- 打开 QNX Momentics IDE。
- 加载要测量的项目。
- 使用菜单 项目 > 属性 打开项目的首选项。
- 选择 QNX C/C++ 项目 > 编译器,并在 其他选项 中输入
--cs-on
。要启用 MC/DC 测量,还需要添加--cs-mcdc
。 - 选择 QNX C/C++ 项目 > 链接器,并在 其他选项 中输入
--cs-on
。 - 重新构建项目以在您的构建文件夹中找到测量数据库 <project_name>
.csmes
。然后,您可以执行您的应用程序并将生成的.csexe
文件导入其中。
在不修改项目的情况下进行测量
要在不修改 QNX Software Momentics 项目的的情况下进行测量,创建一个小批处理文件,该文件设置变量 COVERAGESCANNER_ARGS
并启动 IDE。
例如
set COVERAGESCANNER_ARGS=--cs-on C:\QNX\QNX_Momentics_IDE\qde.exe
然后重新构建项目以测量它。
在 Linux 上为 VxWorks 提供支持
要在工作站的 Wind River 上激活 Coco
- 启动 Wind River Workbench
- 在 项目资源管理器 窗口中选择您的项目,并在上下文菜单中单击 属性。
- 选择构建属性,编译器工具链,并单击 变量 选项卡。
- 查找
TOOL_PATH
变量并将末尾的/bin
字符串替换为/squishcoco
在此更改后,可以使用 CoverageScanner 或本地工具链编译项目。要使用 CoverageScanner,请将选项 --cs-on
添加到编译器和链接器的命令行参数中
- 启动 Wind River Workbench
- 在 项目资源管理器 窗口中选择您的项目,并在上下文菜单中单击 属性。
- 选择构建属性,编译器工具链,并单击 工具 选项卡。
- 在 构建工具 组合框中选择 C-编译器 并将参数
--cs-on
添加到 工具标志 字段的内容中 - 对C++编译器和链接器工具进行相同的操作。
使用这些设置,当代码编译时将生成扩展名为.vxe.csmes
的文件。它包含完整的应用代码,可以使用CoverageBrowser进行检查。运行后,目标应用将创建一个扩展名为.csexe
的文件。
该文件是在目标文件系统中创建的。可以将其传输到主机,并将其导入到.vxe.csmes
文件中创建报告。
本章节内容的视频可在https://youtube.com/watch?v=bMxMV6qHsYU上查看。
LLVM Clang
应已安装LLVM工具链。在安装Coco后,执行构建环境选择程序。您可以在Coco安装目录下找到名为toolselector.exe
的程序。
在主窗口中,选择您的LLVM二进制文件夹的正确安装文件夹,然后单击安装LLVM支持
安装后,Clang编译器支持CoverageScanner的命令行参数(如--cs-on
、--cs-hit
、--cs-mcdc
等),并可用于注入C/C++代码。
IAR嵌入式工作台
仅支持Windows操作系统。应已安装IAR嵌入式工作台。在安装Coco后,执行构建环境选择程序。您可以在Coco安装文件夹下找到名为toolselector.exe
的程序。
在主窗口中,选择您的IAR二进制文件夹的正确安装文件夹,然后单击安装IAR支持
下一步是调整您的嵌入式工作台以执行Coco。在项目设置中选择项目 > 选项 > C/C++编译器 > 额外选项
启用复选框,并在字段中输入--cs-on
。还要将其添加到链接器中,选择项目 > 选项 > 链接器 > 额外选项
启用复选框,并在字段中输入--cs-on
。要禁用Coco,请再次取消选中两个复选框。
TASKING支持
TASKING TriCore Eclipse IDE应已安装。在安装Coco后,执行构建环境选择程序。您可以在Coco安装文件夹下找到名为toolselector.exe
的程序。在主窗口中,选择TASKING VX-Toolset for TriCore,然后单击安装TASKING支持
下一步是激活Eclipse IDE中的代码覆盖率支持。打开TriCore Eclipse IDE,点击项目顶部,在上下文菜单中选择属性。
在项目的配置对话框中,选择C/C++构建 > 设置。将显示完整的编译器和链接器设置。选择C/C++编译器 > 杂项。您应该会看到一个如以下截图所示的额外参数
添加--cs-on
以启用编译器的代码覆盖率分析。
然后为链接器执行相同的操作,选择链接器 > 杂项,并将--cs-on
添加到额外参数中
为了对嵌入式应用程序进行注解,需要重新构建它。在编译时将生成一个.csmes
文件。
但要查看覆盖率,需要提供一组允许将其上传到主机的函数。TASKING 模拟器支持 ARM 的半主机功能,允许从目标直接写入主机文件系统。您可以使用此功能生成执行报告(.csexe
文件),但在实际硬件上,可能需要使用其他实现。
对于设置,将以下行添加到包含主函数的源代码中
#include <stdio.h> #ifdef __COVERAGESCANNER__ static int csfputs(const char *s, void *stream) { return fputs(s, (FILE *)stream); } static void *csfopenappend(const char *path) { return (void*)fopen(path,"a+"); } static int csfclose(void *fp) { return fclose((FILE*)fp); } #endif
然后在 main()
函数的第一行中,将这些函数配置为处理程序
int main( int argc, char *argv[] ) { #ifdef __COVERAGESCANNER__ __coveragescanner_set_custom_io( NULL, csfputs, csfopenappend, NULL, NULL, csfclose, NULL ); #endif ...... }
然后,在应保存执行报告的位置添加以下行
#ifdef __COVERAGESCANNER__ __coveragescanner_save(); #endif
VisualDSP
要启用代码覆盖率分析,请在 VisualDSP® 配置中编译项目,并启用编译期间的代码覆盖率分析
- 单击 项目 > 项目选项。
- 在 编译 > 通用 中,将
--cs-on
添加到 附加选项 字段。 - 在 链接 > 通用 中,将
--cs-on
添加到 附加选项 字段。 - 重新构建您的项目。
在大多数嵌入式目标上,由于没有文件系统来存储代码覆盖率信息,因此需要提供专门的 I/O。此外,由于嵌入式应用程序通常永远不会退出,因此通常需要实现事件处理程序,在接收到特定的触发器时保存执行报告。
模拟器模拟对文件系统的支持。为了将覆盖率报告保存到当前构建目录,只需在 main()
的第一行注册自定义文件 I/O,该 I/O 使用标准 C 文件 API 即可。
例如
#ifdef __COVERAGESCANNER__ static int csfputs(const char *s, void *stream) { return fputs(s, (FILE *)stream); } static void *csfopenappend(const char *path) { return (void*)fopen(path,"a+"); } static int csfclose(void *fp) { return fclose((FILE*)fp); } #endif int main() { #ifdef __COVERAGESCANNER__ __coveragescanner_set_custom_io( NULL, csfputs, csfopenappend, NULL, NULL, csfclose, NULL); #endif .... }
当发生特定触发器时录制覆盖率报告,请在其处理程序中添加以下源代码行
#ifdef __COVERAGESCANNER__ __coveragescanner_save(); __coveragescanner_clear(); #endif
Coco v7.2.0©2024 The Qt Company Ltd.
Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。