1、获取bdf #
通过ide界面抓取。
创建一个bat文件,帮我们打开hightec的ide,然后我们在hightec ide里面手动clean再build一下项目就可以了,就会在对应的位置生成一个bdf文件。这里我的bdf文件会在 C:\Users\gew\Desktop\cpptest\下面生成一个cpptest3.bdf文件。
cpptesttrace --cpptesttraceOutputFile=C:\Users\gew\Desktop\cpptest\cpptest3.bdf --cpptesttraceResponseFilePrefix=-Wl,@ --cpptesttraceTraceCommand=tricore-gcc --cpptesttraceProjectName=hightec-demo "C:\HighTecc\ide\htc-ide-v2.3.1\htc-ide.exe"
**重要点:一定要检查下bdf文件是否正确,比如说包含的.c 文件,链接阶段的.o
如果碰到链接阶段的.o没有抓取出来,一定要想办法展开这个包含.o的文件。--cpptesttraceResponseFilePrefix这个参数就是这个作用的。
2、导入项目 #
导入项目前,开启cpptest注意事项:
如果hightec使用的浮动的许可证,可能cpptest内部调用许可证就会出现license问题,这个时候我们需要这样来启动cpptests,创建一个bat来启动,bat里面的内容是这样的:
set RLM_license=192.168.9.245@5053
C:\parasoft_cpptest_professional-2022.2.0-win32.x86_64\cpptest\cpptest.exe -data C:\Users\gew\Desktop\workspace
导入项目,选择bdf导入。然后打开项目的属性,我们需要配置下图的两个地方。
- 将c编译器,c++编译器,链接器的路径都换成对应的绝对路径。
- 在将 编译器选项 中的内容替换成下方这个:
${cpptest:original_options} -DPARASOFT_CPPTEST -DCPPTEST_SYSTEM_ATOMIC_INCREMENT_ENABLED=0 -DCPPTEST_MEMORY_ANALYSIS_ENABLED=0 -DCPPTEST_SETJMP_ENABLED=0 -DCPPTEST_TIME_MODE=CPPTEST_TIME_NOTIME -DCPPTEST_THREADS_ENABLED=0 -DCPPTEST_ALLOC_IMPL=1 -DCPPTEST_EPT_void_main_no_args -DCPPTEST_MULTI_PROCESSES_COVERAGE_ENABLED=0 -DCPPTEST_USE_LAUTERBACH_FDX_COMMUNICATION
3、处理项目 #
3.1 找到入口,将入口修改成main #
找到代码当中跳转core0_mian的位置,也就是这样的代码: Ifx_Ssw_jumpToFunction(core0_main),在他的上方加上这样几行代码:
#ifdef PARASOFT_CPPTEST
extern void main(void);
Ifx_Ssw_jumpToFunction(main);
#else
Ifx_Ssw_jumpToFunction(core0_main);
#endif
3.2 去插桩 #
对一个文件去插桩,我们一般这样去处理,左键选中这个.c文件,再右键打开它的属性,找到 执行设置,去掉 插桩。
这样不是特别方便,有一个快捷方式可以对多个文件去插桩。方案如下:
1、将控制台等级调整到高,然后对整个项目进行一个静态分析。在控制台中找到如下信息:
将这个里面的.h去除掉,剩下的.c文件,就是我们可以进行去插桩的所有对象了。
2、找到.parasoft文件
.parasoft文件在工作空间下,项目文件夹下面
3、在这个文件中加入内容,将文件去插桩
举个例子:
想要把/hightec-demo/TC377_imu4050/Mcal/EB_Cfg/src/Adc_PBcfg.c这个文件去除插桩,只要在.parasoft文件中加入这样一行内容就行:
/hightec-demo/TC377_imu4050/Mcal/EB_Cfg/src/Adc_PBcfg.c//com.parasoft.xtest.execution.api.cpp.options.instrument.file=false
同理对步骤1当中的文件做这样的处理。下图是处理好的展示结果:
4、对需要测试的.c文件进行插桩 #
在上一步中,我们对所有的文件进行了去插桩,这意味着cpptest都不会处理这些文件,所以我们没办法做单元测试,如果我们相对某个文件进行单元测试,就在 .parasoft文件当中,把相关的语句删掉就好,代表对他进行插桩。
5、修改Build Test Executable - Generic Embedded System #
1、修改下可执行程序的位置,以及后缀。
<LinkStep result="${cpptest:testware_loc}/${project_name}Test.exe"/>
修改成:
<LinkStep result="${cpptest:testware_loc}/${project_name}Test.elf"/>
2、开启debug信息
<BuildRuntimeLibStep ignoreDbgOpts="true" />。
修改成
<BuildRuntimeLibStep ignoreDbgOpts="false" />
3、关闭安全桩。
6、修改cmm #
修改下原始的cmm文件,将可执行程序的位置修改成cpptest生成的新的elf位置。
7、创建一个trace32 fdx传输文件的cmm #
文件名随便叫什么,这里就叫做 cpptest.cmm,里面的内容是这样的:
B::
FDX.EnableChannel TestsSendChannel
FDX.METHOD BUFFERE
FDX.OutChannel TestsSendChannel
FDX.write TestsSendChannel "C:\Users\gew\Desktop\workspace\.cpptest\hightec-demo\unit-data\current_tubf179707\cpptest_results.raw" 1.
提示点:
在5和6中都出现了这个路径C:\Users\gew\Desktop\workspace.cpptest\hightec-demo\unit-data\current_tubf179707\,它到底在哪里,其实这个路径在工作空间下的.cpptest文件下面,这个文件夹下面有一个项目文件夹,项目文件夹中有一个unit-data文件夹,下面会有一个current_tubfxxxxxx文件夹。
8、准备一个加载测试结果的测试配置 #
我已经准备好,直接使用就行。
9、进行单元测试 #
step1:使用Generate unit tests测试配置生成单元测试用例。
step2:选中测试用例,执行5中处理好的Build Test Executable - Generic Embedded System测试配置,生成一个新的elf文件。
step3:打开trace32,运行6中准备的cmm文件,将新的elf刷写进去。
step4:运行7中准备的cm文件打开fdx。
step5:在trace32中进行debug,输入 g main,检查一下是不是进入到了main函数,如果ok,就 g exit。
step6:关闭fdx窗口。
step7:回到cpptest,运行8中准备的测试配置加载结果。
step8:可以在cpptest当中看到覆盖率了。