其他IDE和工具链支持

本章介绍了专用IDE和构建系统,它们大多用于嵌入式系统。

CygWin

安装适用于 GCC 和 G++ 的 CoverageScanner 编译器包装器 CygWin

  1. 打开 构建环境选择 应用程序 (<Windows Coco>\toolselector.exe).
  2. 选择 CygWin - www.cygwin.com 项。
  3. 点击 安装 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 编译器包装器

  1. 打开 构建环境选择 应用程序(%squishcoco%\toolselector.exe)。
  2. 选择项目 TI CGT 6
  3. 选择 TI CGT 6 编译器安装的目录(例如,C:\Desktop\TI)。
  4. 点击 安装 TI 支持 并等待工具生成的确认。

Synopsys Metaware Designware ARC

构建环境选择 中目前还没有对 Metaware 编译器的支持,所以不要在这里寻找 Metaware。不过,Squish Coco 为 2 个 Metaware 编译器提供了包装器:ccacarac

在 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 的新配置。选择它,并将其设置为 活动

接下来,在 环境 部分设置 PATHCOVERAGESCANNER_ARGS

之后,IDE 应该能够构建项目的调试版可执行文件。

如果您不再需要代码覆盖率,请切换回之前的构建配置之一。

ARM Keil μVision

为了启用代码覆盖率分析,使用 Coco ARM 编译器包装器编译项目并在编译过程中启用代码覆盖率分析

  1. 为您使用的 ARM® Keil® μVision 工具链安装 CoverageScanner 编译器包装器
    1. 打开 构建环境选择 应用程序(<Windows Coco>\toolselector.exe)。
    2. 选择项目 ARM-Keil
    3. 选择 ARM Keil μVision 编译器安装的目录(例如,C:\Keil_v5\ARM)。
    4. 点击 安装 ARM-Keil 支持 并等待工具生成的确认。
  2. 在编译过程中启用代码覆盖率分析
    1. 点击 项目 > 目标选项
    2. C/C++ 选项卡上,将 --cs-on 添加到 其他控制 字段中。

    3. 链接器 选项卡上,将 --cs-on 添加到 其他控制 字段中。

Arm DS

要启用 Arm DS 项目的代码覆盖率分析,使用 Coco ARM 编译器包装器编译它并在编译过程中启用代码覆盖率分析

  1. 为 Arm DS 工具链安装 CoverageScanner 编译器包装器
    1. 打开 构建环境选择 应用程序(<Windows Coco>\toolselector.exe)。
    2. 选择项目 ARM-DS

      "Installation of Arm DS support in Build Environment Selection"

    3. 选择 Arm DS 编译器安装的目录(例如,C:\Program Files\DS-5 v5.29.3)。
    4. 点击 安装ARM-DS支持 并等待确认工具已生成。

      "Confirmation of the installation of Arm DS support"

  2. 在编译过程中启用代码覆盖率分析
    1. 点击 项目 > 属性
    2. Arm C/C++ 编译器 5 选项卡中,将 --cs-on 添加到 其他 字段。

      "Activating the code coverage analysis for an Arm compiler"

    3. Arm 链接器 5 选项卡中,将 --cs-on 添加到 其他控制 字段。

      "Activating the code coverage analysis for an Arm linker"

要将目标上的覆盖率数据上传到主机,定义一些自定义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编译器包装器

  1. 打开 构建环境选择 应用程序(<Windows Coco>\toolselector.exe)。
  2. 选择 Green Hills 选项。
  3. 选择安装Green Hills Software编译器的目录。
  4. 点击 安装Green Hills支持 并等待确认工具已生成。

命令行工具

Green Hills Software编译器的命令行工具安装在每个已安装本机工具链的 squishcoco 文件夹中。例如,如果本机工具链安装在 c:\ghs\comp_201426 下,则Coco编译器包装器安装在每个已安装本机工具链的 c:\ghs\comp_201426\squishcoco 下。

编译器包装器完全替代了Green Hills Software工具链。要激活代码覆盖率分析,请将参数 --cs-on 添加到编译器参数。

覆盖率扫描器库

要保存执行报告

  1. CoverageScanner 库提供一个列表,其中包含允许您将覆盖率信息上传到主机的I/O函数。
  2. 在特定触发器下手动保存覆盖率报告。

要保存覆盖率报告,请使用以下代码片段(将此代码添加到应触发报告生成的事件处理器中)

#ifdef __COVERAGESCANNER__
    __coveragescanner_save();
    __coveragescanner_clear();
#endif

要提供I/O函数,请在应用程序的 main() 函数中调用 __coveragescanner_set_custom_io()。至少需要通过 __coveragescanner_set_custom_io() 提供三个函数

  1. fopen() 等效的功能,用于以追加模式打开执行报告文件(扩展名为 .csexe
  2. fclose() 等效的功能。
  3. 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 编译器包装器

  1. 打开 构建环境选择 应用程序(<Windows Coco>\toolselector.exe)。
  2. 选择项 QNX
  3. 选择已安装 QNX 软件工具链的目录。默认情况下,它为 c:\Users\<account>\qnx700
  4. 点击 安装 QNX 支持 并等待确认工具生成。

配置

安装过程完成后,激活和配置所选构建模式下的 Coco 参数。或者创建一个仅为代码覆盖率而设的专用模式,这是更好的实践。

QNX Software 7.0

按以下步骤操作

  1. 打开 QNX Momentics IDE。
  2. 加载要测量的项目。
  3. 使用菜单 项目 > 属性 打开项目的首选项。

    "Project settings on Momentics IDE 7.0"

  4. 选择 C++ 构建工具 > 环境 并添加变量 COVERAGESCANNER_ARGS,其值为 --cs-on。您还可以指定其他设置。例如,要启用 MC/DC 测量,请添加 --cs-mcdc
  5. 重新构建项目以在您的构建文件夹中找到测量数据库 <project_name>.csmes。然后,您可以执行您的应用程序并将生成的 .csexe 文件导入其中。

QNX Software 7.1

按以下步骤操作

  1. 打开 QNX Momentics IDE。
  2. 加载要测量的项目。
  3. 使用菜单 项目 > 属性 打开项目的首选项。

    "Project settings on Momentics IDE 7.1"

  4. 选择 QNX C/C++ 项目 > 编译器,并在 其他选项 中输入 --cs-on。要启用 MC/DC 测量,还需要添加 --cs-mcdc
  5. 选择 QNX C/C++ 项目 > 链接器,并在 其他选项 中输入 --cs-on
  6. 重新构建项目以在您的构建文件夹中找到测量数据库 <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

  1. 启动 Wind River Workbench
  2. 项目资源管理器 窗口中选择您的项目,并在上下文菜单中单击 属性
  3. 选择构建属性,编译器工具链,并单击 变量 选项卡。
  4. 查找 TOOL_PATH 变量并将末尾的 /bin 字符串替换为 /squishcoco

    "Setting the TOOL_PATH variable"

在此更改后,可以使用 CoverageScanner 或本地工具链编译项目。要使用 CoverageScanner,请将选项 --cs-on 添加到编译器和链接器的命令行参数中

  1. 启动 Wind River Workbench
  2. 项目资源管理器 窗口中选择您的项目,并在上下文菜单中单击 属性
  3. 选择构建属性,编译器工具链,并单击 工具 选项卡。
  4. 构建工具 组合框中选择 C-编译器 并将参数 --cs-on 添加到 工具标志 字段的内容中

    "Tool flags"

  5. C++编译器链接器工具进行相同的操作。

使用这些设置,当代码编译时将生成扩展名为.vxe.csmes的文件。它包含完整的应用代码,可以使用CoverageBrowser进行检查。运行后,目标应用将创建一个扩展名为.csexe的文件。

该文件是在目标文件系统中创建的。可以将其传输到主机,并将其导入到.vxe.csmes文件中创建报告。

本章节内容的视频可在https://youtube.com/watch?v=bMxMV6qHsYU上查看。

LLVM Clang

应已安装LLVM工具链。在安装Coco后,执行构建环境选择程序。您可以在Coco安装目录下找到名为toolselector.exe的程序。

在主窗口中,选择您的LLVM二进制文件夹的正确安装文件夹,然后单击安装LLVM支持

"Build Environment Selection"

安装后,Clang编译器支持CoverageScanner的命令行参数(如--cs-on--cs-hit--cs-mcdc等),并可用于注入C/C++代码。

IAR嵌入式工作台

仅支持Windows操作系统。应已安装IAR嵌入式工作台。在安装Coco后,执行构建环境选择程序。您可以在Coco安装文件夹下找到名为toolselector.exe的程序。

在主窗口中,选择您的IAR二进制文件夹的正确安装文件夹,然后单击安装IAR支持

"Build Environment Selection"

下一步是调整您的嵌入式工作台以执行Coco。在项目设置中选择项目 > 选项 > C/C++编译器 > 额外选项

"Compiler Extra Options"

启用复选框,并在字段中输入--cs-on。还要将其添加到链接器中,选择项目 > 选项 > 链接器 > 额外选项

"Linker Extra Options"

启用复选框,并在字段中输入--cs-on。要禁用Coco,请再次取消选中两个复选框。

TASKING支持

TASKING TriCore Eclipse IDE应已安装。在安装Coco后,执行构建环境选择程序。您可以在Coco安装文件夹下找到名为toolselector.exe的程序。在主窗口中,选择TASKING VX-Toolset for TriCore,然后单击安装TASKING支持

"Build Environment Selection"

下一步是激活Eclipse IDE中的代码覆盖率支持。打开TriCore Eclipse IDE,点击项目顶部,在上下文菜单中选择属性

在项目的配置对话框中,选择C/C++构建 > 设置。将显示完整的编译器和链接器设置。选择C/C++编译器 > 杂项。您应该会看到一个如以下截图所示的额外参数

"Compiler Extra Options"

添加--cs-on以启用编译器的代码覆盖率分析。

然后为链接器执行相同的操作,选择链接器 > 杂项,并将--cs-on添加到额外参数中

"Linker Extra Options"

为了对嵌入式应用程序进行注解,需要重新构建它。在编译时将生成一个.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® 配置中编译项目,并启用编译期间的代码覆盖率分析

  1. 单击 项目 > 项目选项
  2. 编译 > 通用 中,将 --cs-on 添加到 附加选项 字段。

    "Activating the code coverage analysis for the compiler"

  3. 链接 > 通用 中,将 --cs-on 添加到 附加选项 字段。

    "Activating the code coverage analysis for the linker"

  4. 重新构建您的项目。

在大多数嵌入式目标上,由于没有文件系统来存储代码覆盖率信息,因此需要提供专门的 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. 在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。