【粉丝答疑(1)】使用LDRA Testbed(TBrun)进行单元测试编译时报自定义的数据类型错误_问题排查及解决

前言

最近有粉丝在后台提问,咨询使用Testbed(TBrun)进行单元动态测试时报错的问题。这个问题比较常见,于是想着写下本篇文章,希望对遇到类似问题的朋友有所帮助。


问题描述

事情的经过大概是这样子的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于当时在工作比较忙,只简单分析了一下,给出了一个排查问题的建议,就没有下文了。今天相对空闲一点,就全面的排查分析一下,写下这篇文章,也是为其他朋友提供一个参考。


原因分析:

上面的图片是Testbed(TBrun)编译时打印的错误信息,报了非常多个error,初学者可能会被直接吓懵。观察一下会发现均为非常类似的错误,都是int8、int16、int32、uint8、uint32等等数据类型引起的。这种情况一般是编译器不认识自定义的int8、int16、int32、uint8、uint32等数据类型造成的,C语言当然没有这些数据类型,一般都是我们在编写代码时自定义的,比如“typedef unsigned char uint8;”、“typedef unsigned long uint32;”之类的,这是一个很好的编码习惯,可以明确数据类型的位宽,提高可维护性和可移植性。
那么这里为什么报这么多自定义类型的错误呢?推测一下,这些自定义类型一般都是在头文件中定义的,方便其他程序文件使用时,可以直接包含引用。这里不认识自定义类型,很可能是没有包含定义的头文件。那么问题来了,被测的软件工程一般都会在开发环境下编译通过后,才会拿来做单元测试,为什么开发环境下能编译通过,testbed编译却会失败呢?
可能存在以下几种原因:
1、实际的开发工程有配置预编译宏定义,而testbed未参照进行预编译配置,编译时宏展开与期望不一致,导致自定义类型的代码未被正确包含;
2、testbed中对头文件的包含路径未正确配置,导致头文件未被正确包含;
3、现在的编译器优化功能越来越强大,完整工程在开发环境下编译时,就算有些程序文件漏包含了头文件,编译器也能通过头文件的多重包含和优化,编译通过;而使用testbed进行单元测试时,一般只会选择被测的1个或多个.c文件,不会把整个工程的源文件选完,所以不一定能进行完全的头文件包含优化,造成编译失败。
4、这些自定义的类型在系统头文件中,而用“<>”括起来的系统头文件,testbed默认是不会展开的(默认设置如下图),造成编译失败。
在这里插入图片描述


解决方案:

首先模拟复现一下问题:
在这里插入图片描述
针对上面原因分析中的4种可能,逐一排查如下:
1、首先对照实际的开发工程中配置的预编译宏定义,排查一下testbed的预编译宏定义是否配置正确(参照下图打开sysppvar.dat文件添加预编译宏定义):
在这里插入图片描述
在这里插入图片描述
2、然后对照实际的开发工程中配置的头文件包含路径,排查一下testbed的头文件包含路径是否配置正确(特别确认一下有前面报错的自定义类型的头文件所在路径是否被正确配置)(参照下图打开sysearch.dat文件添加头文件的包含路径):
在这里插入图片描述
在这里插入图片描述
3&4、完成前面两步后,再重新编译试一次,如果还是编译失败,报同样的错误,那大概率是原因3或4造成的。这种情况可以采取直接手动添加代码的方式解决。
在TBrun的被测源文件视图下,选中被测源文件,在右键菜单中选择“View \ Edit Pre-Include Code”,在弹出的代码框中直接添加代码,包含缺少的头文件,或者直接添加报错的自定义类型代码:
在这里插入图片描述
在这里插入图片描述
完成上述排查和处理后,问题解决,重新生成测试驱动、编译、执行即可:
在这里插入图片描述


总结

以上便是“使用LDRA Testbed(TBrun)进行单元测试编译时报自定义的数据类型错误”的排查过程和解决方法,不限于这个问题,其他类似问题也可以参考此排查步骤和解决方法,希望能帮助到遇到类似问题的朋友。也欢迎有其他问题的朋友继续与我交流,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/358097.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GC8838取代DRV8838直流电机驱动芯片,可应用在摄像机,玩具等产品上

GC8838 一款 12V 直流电机驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。芯片一般用了驱动一个直流电机或者使用两颗来驱动步进电机。 可以工作在 0~12V 的电源电压上&#xff0c;能提供高达 1.5A 持续…

智慧文旅:未来旅游业的数字化转型

随着科技的快速发展&#xff0c;数字化转型已经成为各行各业的必然趋势。旅游业作为全球经济的重要组成部分&#xff0c;也正经历着前所未有的变革。智慧文旅作为数字化转型的重要领域&#xff0c;正逐渐改变着旅游业的传统模式&#xff0c;为游客带来更加便捷、个性化的旅游体…

小项目:使用MQTT上传温湿度到Onenet服务器

前言 我们之前分别编写了 DHT11、ESP8266 和 MQTT 的代码&#xff0c;现在我们将它们仨整合在一起&#xff0c;来做一个温湿度检测小项目。这个项目可以实时地将 DHT11 传感器获取到的温湿度数据上传到 OneNET 平台。通过登录 OneNET&#xff0c;我们随时随地可以查看温湿度数…

macOS与Linux相互投屏的方法

很多人面对跨系统投屏都望而却步。其实只要找对方法&#xff0c;两台不同系统的电脑也可以相互投屏。 今天就来看看Linux系统和macOS系统如何相互投屏&#xff01; 第一步&#xff0c;将Linux系统电脑和macOS系统电脑连接同一网络。假设是macOS系统投屏到Linux系统&#xff0c;…

javaweb项目,springboot幼儿园健康管理系统,界面美观,增删改查。

javaweb项目&#xff0c;幼儿园健康管理系统&#xff0c;界面美观&#xff0c;增删改查。 管理员&#xff0c;老师&#xff0c;学生三个角色。 功能&#xff1a;权限管理&#xff0c;咨询列表&#xff0c;教师列表&#xff0c;班级列表&#xff0c;健康档案列表&#xff0c;评…

使用QT实现播放gstreamer的命令(二)

一、前言 上一篇文章写到了&#xff0c;如何快速使用C来执行gstreamer的命令&#xff0c;如何在QT中显示gstreamer的画面&#xff0c;原文如下&#xff1a; https://blog.csdn.net/Alon1787/article/details/135107958 二、近期的其他发现&#xff1a; 1.gstreamer的画面显示在…

代码训练营Day.48 | 198. 打家劫舍、213. 打家劫舍II、337. 打家劫舍III

198. 打家劫舍 1. LeetCode链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2. 题目描述 3. 解法 可以看作一个01背包问题。背包容量为所有房子中存储的金钱总数。 1. dp数组含义&#xff1a;dp[i][j]表示前i个房子在背包容量为j的情况下可以…

Arrays.asList()方法调用add()或remove()抛出java.lang.UnsupportedOperationException问题

在使用Arrays.asList方法将以,分割的字符串转为list集合时&#xff0c;调用add和remove等方法时会抛出java.lang.UnsupportedOperationException。以下为原因和解决方法。 原因&#xff1a; Arrays.asList()方法返回了一个Arrays类的一个继承了AbstractList的ArrayList内部类…

Python面向对象-类专题

在Python中&#xff0c;if __name__ __main__: 这一句是一个常见的模式&#xff0c;用于判断当前的模块是被直接运行还是被导入到其他模块中。 当Python文件被直接运行时&#xff0c;其内置的__name__变量被设置为__main__。但如果这个文件被其他文件导入&#xff0c;__name__…

面向云服务的GaussDB全密态数据库

前言 全密态数据库&#xff0c;顾名思义与大家所理解的流数据库、图数据库一样&#xff0c;就是专门处理密文数据的数据库系统。数据以加密形态存储在数据库服务器中&#xff0c;数据库支持对密文数据的检索与计算&#xff0c;而与查询任务相关的词法解析、语法解析、执行计划生…

海外云手机为什么吸引用户?

近年来&#xff0c;随着全球化的飞速发展&#xff0c;海外云手机逐渐成为各行各业关注的焦点。那么&#xff0c;究竟是什么让海外云手机如此吸引用户呢&#xff1f;本文将深入探讨海外云手机的三大吸引力&#xff0c;揭示海外云手机的优势所在。 1. 高效的社交媒体运营 海外云…

盒子模型的内容总结

知识引入 1.认识盒子模型 在浏览网站时我们会发现内容都是按照区域划分的。这使得网页很工整、美观。在页面中&#xff0c;每一块区域分别承载不同的内容&#xff0c;使得网页的内容虽然零散&#xff0c;但是在版式排列上依然清晰有条理。如图1 图1 *承载内容的区域称为盒子…

Windows系统安装OpenSSH+VS Code结合内网穿透实现远程开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

【Lazy ORM 整合druid 实现mysql监控】

Lazy ORM 整合druid 实现mysql监控 JDK 17 Lazy ORM框架地址 up、up欢迎start、issues 当前项目案例地址 框架版本描述spring-boot3.0.7springboot框架wu-framework-web1.2.2-JDK17-SNAPSHOTweb容器Lazy -ORM1.2.2-JDK17-SNAPSHOTORMmysql-connector-j8.0.33mysql驱动druid-…

【人工智能课程】计算机科学博士作业二

使用TensorFlow1.x版本来实现手势识别任务中&#xff0c;并用图像增强的方式改进&#xff0c;基准训练准确率0.92&#xff0c;测试准确率0.77&#xff0c;改进后&#xff0c;训练准确率0.97&#xff0c;测试准确率0.88。 1 导入包 import math import warnings warnings.filt…

七、内存管理单元(MMU)

前言 在多任务的处理器上&#xff0c;往往运行着许多的用户进程&#xff0c;这些进程之间相互隔离&#xff0c;它们都有自己的虚拟存储空间。要实现这样的虚拟存储空间&#xff0c;需要可以进行地址重分配以及虚拟地址到物理地址的转换。 MMU就是实现这种功能的硬件部件&…

哨兵1号回波数据(L0级)提取与SAR成像(全网首发)

本专栏目录:全球SAR卫星大盘点与回波数据处理专栏目录 本文先展示提取出的回波结果,然后使用RD算法进行成像,展示成像结果,最后附上哨兵1号回波提取的MATLAB代码。 1. 回波提取 回波提取得到二维复矩阵数据,对其求模值后绘图如下(横轴为距离向采样点,纵轴为方位向采样…

如何高效复制加密狗:一篇加密狗复制的常见方法全面指南

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

C++实现通讯录管理系统

目录 1、系统需求 2、创建项目 2.1 创建项目 3、菜单功能 4、退出功能 5、添加联系人 5.1 设计联系人结构体 5.2 设计通讯录结构体 5.3 main函数中创建通讯录 5.4 封装联系人函数 5.5 测试添加联系人功能 6、显示联系人 6.1 封装显示联系人函数 7、删除联系人 7.1…

Spring Security简介

什么是Spring Security Spring Security是 Spring提供的安全认证服务的框架。 使用Spring Security可以帮助我 们来简化认证和授权的过程。 官网&#xff1a;Spring Security 对应的maven坐标&#xff1a; <!--security启动器--> <dependency><groupId>or…