Parasoft C/C++test 测试中 main 函数重复定义解决方案

在Parasoft C/C++test中出现main函数重复定义的情况,通常是由于以下两个原因之一造成的:一是main函数所在的文件被进行了插桩操作;二是测试配置中未勾选"重命名main()函数"选项。

正常来说,C/C++test在cpptest_testrunner.h中定义main函数,然后会将main函数重命名,如果项目中有多个main函数,那么报错的应该是类似NewMain重复定义这样的报错。报告上面这样的main重复定义的话,说明原项目中的main函数并没有正常被重命名。

解决办法

考虑第一种情况

出现main函数重复定义错误时,首先应检查main函数所在的源文件是否被设置为去插桩。Parasoft C/C++test在执行测试时,会通过向源代码插桩来收集覆盖率数据。若对包含main的文件正常插桩,工具会自动将其重命名,从而避免与测试框架自身的入口函数冲突;但若该文件被排除在插桩范围之外,main函数保持原样,就会引发重复定义错误。

考虑第二种情况

选择运行的测试配置,找到插桩模式的编辑

查看插桩模式中的"重命名main()函数",按照下图勾选上。

其他解决办法

针对​​​​​​​Parasoft C/C++test中出现的main函数重复定义问题,除了调整插桩设置和启用"重命名main()函数"功能外,您还可以选择直接使用项目中的main函数作为测试入口。这种方法的核心是切换测试配置的执行模式。

步骤一:

在构建设置中添加预处理器宏定义-DCPPTEST_ENTRY_POINT_DEFINED,其核心作用是向C/C++test工具链发出一个明确的信号,告知其测试执行的入口点已由用户代码自行提供。在默认的"单元测试"模式下,C/C++test为了能够组织并运行测试用例,会自动生成一个它自己的 main 函数作为程序的起点。当项目中也存在一个main函数时,在链接阶段就会因为符号重复定义而导致错误。通过定义此宏,实质上是在指示C/C++test跳过其标准main函数的生成步骤,从而从根源上避免链接冲突。

步骤二:

上面步骤保证最终可执行程序运行从项目的main函数进入,但这样是不会运行到测试用例代码的,所以还需要对main函数进行修改。需要修改两个地方:

在文件前面添加头文件:

cpp 复制代码
#ifdef PARASOFT_CPPTEST
#include "cpptest.h"
#endif

在main函数合适的位置添加如下代码:

cpp 复制代码
#ifdef PARASOFT_CPPTEST
CppTest_Main(0,0);
#endif
相关推荐
慧都小项1 天前
软件行业|Parasoft与IAR的嵌入式DevOps测试集成
自动化测试·devops·iar·parasoft
慧都小项3 天前
Parasoft C/C++test 单元测试用例如何导出与有效管理
单元测试·测试用例·parasoft
慧都小项3 天前
Parasoft助力RISC-V芯片量产:提供高可靠软件测试方案
软件测试·risc-v·芯片·parasoft
慧都小项3 天前
Parasoft软件测试解决方案助力Renovo汽车ADAS开发安全与合规
自动驾驶·汽车软件·parasoft·renovo
慧都小项4 天前
测试自动化教程:Parasoft如何流重定向与单元测试自动化
parasoft·单元测试自动化·流重定向
慧都小项5 天前
Parasoft C/C++test 针对 CMake 项目的自动化测试配置
自动化测试·cmake·parasoft
慧都小项23 天前
Parasoft C/C++test 针对嵌入式开发的内存错误检测解决方案
parasoft·堆栈优化·动态插桩
慧都小项24 天前
Parasoft C/C++test案例:基于CERT/CWE的代码合规自动化
parasoft·cert·cwe
慧都小项25 天前
构建安全的自动驾驶:软件测试中的编码规范与AI验证
人工智能·测试工具·安全·自动驾驶·parasoft