1 C-RUN
C-RUN直接集成在IAR Embedded Workbench for Arm中,在代码执行过程中进行动态代码分析,及时发现运行时发现的实际错误。
C-RUN可以检查算术问题、边界问题和堆完整性,各个功能特点:
- 算术问题:
- 包括溢出、环绕、转换错误、除0、switch缺少default语句。
- 通过在潜在错误可能发生的所有位置插入特点的测试代码检查此类错误。
- 源代码级别的测试通常会被为插入一个if或者等效语句,检查条件,并将辅助信息内容打印在stdout或者特殊值写入端口以记录问题。
- 边界问题:
- 包括:典型的越界问题;
- 越界概念可以推广到通过指针访问的任何内容、类型及大小。包括指向堆栈上的标量对象的指针,如果更改指针,指向堆栈上的某个内容,那么边界检查器可以检测到指针的新值是否在有效对象的边界内。
- 堆完整性:
- 完整性检查在每次调用malloc、free等函数时进行,无论是在C还是C++环境中。
- 如果堆很大,堆完整性检查可能会对性能产生真正的负面影响,因为检查可能涉及到遍历整个堆,因此决定检查频率的方式对于应用程序至关重要。
C-RUN具体功能包括:
-
分析C和C++代码;
-
可在工程配置栏“Runtime Checking”中进行设置;
-
独特的测试代码优化,最小化代码大小开销;
-
全面详细的运行时错误信息提示;
-
对每个发现的错误提供调用栈信息;
-
编译器中反馈代码的相关性和图形;
-
灵活的错误过滤管理;
-
边界检查,确保对数组和其他对象的访问在边界内;
-
缓冲区溢出检测;
-
在类型转换时检测值的更改;
-
检查计算中的溢出和环绕;
-
发现位移操作中的位丢失;
-
堆和内存泄漏检查;
-
支持版本:IAR Embedded Workbench for Arm 7.20 版本及以上、IAR Embedded Workbench for RX 3.10 版本及以上;