本主题说明如何使用 C++test 执行运行时错误检测。本节包括:

运行时错误检测总览

C++test 的运行时错误检测使团队能够在单元或应用程序级别自动识别严重的运行时缺陷,例如内存泄漏、空指针、未初始化的内存和缓冲区溢出。  它适用于企业和嵌入式开发。 

此功能的适应性使使用非标准内存分配模型(例如嵌入式系统)的团队可以进行运行时内存分析。由于用于该分析的仪器重量轻,因此可以在目标板,模拟器或主机上运行以进行嵌入式测试。 

报告收集到的问题,并提供了解和解决问题所需的详细信息(包括内存块大小、数组索引、分配/取消分配堆栈跟踪等)。跟踪覆盖率指标以帮助您衡量并扩大测试范围。

在应用程序级别执行运行时错误检测

要对应用程序运行执行运行时错误检测:

C++test 将准备应用程序可执行文件的检测版本,然后运行它。根据所选的配置,C++test 将报告应用程序执行期间发现的覆盖率统计信息和/或内存错误。 

对于内置于可执行文件中的项目,您可以使用运行时错误检测来监视应用程序的运行。要监视库项目,您需要为 C++test 目的向项目添加带有 'main()’ 函数定义(模拟使用被测试库的某些方案)的附加代码。例如,可以使用#ifdef PARASOFT_CPPTEST防止将这样的 'main()’函数添加到一个经过测试的库源文件中。

在单元测试执行期间执行运行时错误检测

在单元测试执行期间执行运行时错误检测:

C++test 将生成一个启用了运行时内存分析的测试可执行文件,然后执行测试。测试执行完成后,C++test 将报告与常规单元测试任务一起发现的内存问题。


在以下位置,每个运行时错误检测问题都被报告为违反给定规则(带有消息,位置和堆栈跟踪):

抑制运行时错误检测违规

可以像在静态分析冲突中一样抑制运行时错误检测冲突:在 GUI 或源代码中(// parasoft-suppress <ruleid> ["<reason>"])。

有关详细说明,请参见 抑制报告可接受的违规行为

自定义运行时错误检测选项

您可以通过修改【测试配置】管理器的【执行】标签中的选项来自定义运行时错误检测。

执行>常规 选项卡中,您可以控制以下选项:

执行>运行时间 选项卡中,您可以控制以下选项:

运行时错误检测规则

C++ test 提供了以下运行时错误检测“规则”,这些规则在测试的代码中查找与内存相关的问题:

规则标识符说明
RUN-MEM-DANG

不要使用悬空指针访问内存

该规则发现与使用指向已释放的内存的指针有关的问题。

RUN-MEM-WILD

不要使用野指针访问内存

该规则发现与使用不指向有效内存缓冲区的指针有关的问题。

RUN-MEM-NULL

不要使用空指针访问内存

该规则发现与使用空指针有关的问题。

RUN-MEM-RANGE

不要使用超出范围的指针访问内存

该规则发现与访问超出范围的缓冲区有关的问题(例如访问 9 元素缓冲区的第 10 个元素)。

RUN-MEM-UNINIT

不读取未初始化的内存

此规则发现与从已分配(但未初始化)的内存中读取有关的问题。

RUN-MEM-FREEDANG

不要在悬空的指针上使用 free

该规则发现与尝试释放已经释放的内存指针有关的问题。

RUN-MEM-FREEIL

不要在非法指针上使用 free

该规则发现与试图在未指向通过 malloc 分配的有效内存块的指针上使用 free 有关的问题。

RUN-MEM-FREELOC

不要在本地内存指针上使用 free

该规则发现与试图在指向本地内存块的指针上使用 free 有关的问题。

RUN-MEM-FREEGLOB

不要在全局内存指针上使用 free

该规则发现与试图在指向全局内存块的指针上使用 free 有关的问题。

RUN-MEM-FREENULL

不要在空指针上使用 free

该规则发现与尝试对空指针使用 free 有关的问题。

RUN-MEM-MAZERO

请勿使用大小等于 0 的 malloc

该规则发现与使用 malloc 分配零大小缓冲区有关的问题。

RUN-MEM-CAZEROELEM

请勿使用大小等于 0 的 calloc

该规则发现与使用 calloc 分配零元素缓冲区有关的问题

RUN-MEM-CAZEROSIZE

请勿使用元素大小等于 0 的 calloc

此规则发现与使用 calloc 分配零大小元素的缓冲区有关的问题。

RUN-MEM-RAILL

不要对非法指针使用 realloc

该规则发现与在指针上使用 realloc 有关的问题,该指针未指向通过 malloc 分配的有效内存块。

RUN-MEM-RALOC

不要在本地内存指针上使用 realloc

该规则发现与在指向本地内存块的指针上使用 realloc 有关的问题。

RUN-MEM-RAGLOB

不要在全局内存指针上使用 realloc

该规则发现与在指向全局内存块的指针上使用 realloc 有关的问题。

RUN-MEM-RAZERO

不要使用 new 大小等于 0 的 realloc

该规则发现与使用 realloc 分配零大小缓冲区有关的问题。

RUN-MEM-LEAK

避免内存泄漏

此规则查找内存泄漏。当指向由 malloc/realloc/calloc 分配的内存的指针丢失时,它将报告一个问题。

RUN-MEM-CORRUPT

避免内存损坏

此规则发现内存损坏。当在释放过程中意外地重写了分配有 malloc/realloc/calloc 的内存块时,它将报告一个问题。

运行时错误检测测试配置

有关可用测试配置的说明,请参见 内置测试配置

我们建议您使用“使用...构建应用程序”如果要验证是否已准备好进行测试,请测试配置。如果构建的应用程序将在外部运行(例如,用于嵌入式测试),这些也是测试配置。在这种情况下,完整的流程包括构建,部署/运行(手动完成)和“读取日志”步骤。 

“使用...构建和运行应用程序”当您希望 C++test 使用【测试配置】中指定的命令行构建并执行经过测试的应用程序时,应使用【测试配置】。 

进一步来说:

运行时错误检测的已知限制