Cantata测试脚本要和被测代码一起编译、链接,才能生成可运行的测试程序。因此,原工程能编译成功,Cantata测试却无法运行时,先看编译日志停在哪一步:找不到头文件、链接失败和程序启动失败,检查的位置并不一样。下面以Cantata的Eclipse界面为例说明。
一、Cantata怎么配置编译环境
创建测试项目时,可以先让Cantata识别原工程的构建系统,导入头文件路径和预处理宏,再检查测试项目使用的目标环境。Cantata的测试项目向导支持识别CMake、Make及部分开发工具的构建设置。
1、导入原工程的构建设置
①点击【File】→【New】→【Project...】,在新建项目向导中选择Cantata测试项目。
②在【Location】中选择被测代码所在位置。
③在【Build System】中选择原工程使用的构建系统,或点击【Detect】进行识别。
④点击【Next】,检查识别到的项目设置,填写测试项目名称和位置后点击【Finish】。
2、检查头文件路径和宏定义
①右键点击测试项目,选择【Properties】。
②打开【Preprocessor Include Paths,Macros etc.】,查看导入的头文件目录和宏定义。
③对照原工程当前使用的构建配置,补齐缺失的头文件路径、宏定义和编译选项。
④点击【Apply】→【OK】,重新构建测试项目。
3、确认测试使用的目标环境
①在项目【Properties】中打开【Cantata】,检查当前测试项目选择的目标部署配置。
②核对该配置使用的编译器、目标平台和Cantata库是否与被测代码一致。
③保存设置后,先构建一条测试脚本,确认能够生成测试可执行文件。
交叉编译项目尤其要核对目标配置。Cantata的目标部署包含面向相应平台的库与配置,测试程序也需要用对应工具链构建。
二、Cantata编译环境配置错误导致测试无法运行如何排查
先打开构建输出,定位第一条错误。后续大量报错可能由同一处设置引起,按第一条错误修改后再构建,更容易看清问题是否解决。
1、编译器无法启动
①在测试项目的【Properties】中检查当前选择的编译器及工具链位置。
②核对编译器程序是否仍在该路径,并检查所需环境变量。
③在Cantata中重新构建测试脚本,查看【Console】中实际调用的编译命令。
④如使用了多个工具链版本,将测试项目切换到与原工程相同的版本后再构建。
2、提示找不到头文件或类型
①在【Console】中找到第一条缺少头文件或类型定义的报错,记下对应文件。
②打开【Properties】→【Preprocessor Include Paths,Macros etc.】,检查该文件所在目录是否已导入。
③核对原工程使用的宏定义、头文件搜索顺序和C/C++语言设置。
④修改后点击【Apply】→【OK】,重新构建测试脚本。
若原工程调整过构建配置,也要重新核对测试项目中的导入结果;导入时正确的路径,后来可能已经不适用。
3、编译通过但链接失败
①在【Console】中找到第一条未定义符号、重复定义或库文件不兼容的报错。
②检查测试构建中是否包含被测源文件、所需目标文件及依赖库。
③核对Cantata库与目标平台、编译器和构建架构是否一致。
④对重复定义的符号,检查是否同时加入了原函数实现和测试替代实现;调整后重新链接。
4、生成了测试程序却无法运行
①在【Console】中确认测试可执行文件已经生成,查看启动时的第一条错误。
②检查当前运行目标是本机、模拟器还是目标设备,并核对测试程序的运行位置。
③如需在目标设备执行,检查程序传输、启动命令及结果回传设置。
④重新运行测试,确认Cantata能收到执行结果。
Cantata的测试程序可以在本机或目标平台运行。对于目标设备,构建成功之后,还需要完成程序部署、执行和结果取回。
三、环境调整后怎样避免再次配置错误
测试项目能运行后,最好保留这次有效的构建设置。以后升级编译器或切换目标板时,便于知道哪些内容需要跟着改。
1、记录当前有效的配置
①保存测试项目的编译选项、头文件路径、宏定义及Cantata目标部署配置。
②记录本次使用的编译器版本和构建系统配置。
③保留一条可正常构建并运行的测试脚本,作为环境变更后的检查样例。
2、变更工具链后先做小范围验证
①更新编译器或原工程构建文件后,打开测试项目【Properties】,重新核对导入的设置。
②构建并运行保留的检查样例。
③确认样例生成结果后,再运行其余测试脚本。
总结
测试运行不起来时,先辨认问题发生在编译、链接还是启动阶段,能省去反复修改无关设置的时间。对于长期维护的项目,也值得保留一条简单、稳定的测试脚本:环境一有变化,先用它确认整条流程是否通畅,再检查具体用例。希望这篇关于Cantata编译环境配置与测试无法运行排查的内容对大家有帮助。如有Cantata相关需求,欢迎联系我们咨询。