LDRA TBRun编译缺失自身ldra_qq_test_comment函数调用的解决方法
STM32L4 Keil环境下LDRA TBrun单元测试ldra_qq_test_comment参数不匹配问题排查
这个问题和业务代码完全无关,是LDRA自动插桩逻辑和当前环境的桩实现版本不匹配导致的,按优先级从高到低排查:
- 优先清缓存全量重插桩
绝大多数同类问题都是增量编译、旧插桩文件残留导致的:- 完全关闭Keil、TBrun进程,手动删除项目下所有编译中间目录:
Objects、Listings、TBrun生成的tbwrk工作目录,以及所有文件名带ldra_前缀的自动生成源文件 - 先打开TBrun加载项目,核对插桩基础配置:语言模式必须选C++(项目用了.cpp源文件时,选C模式会生成错误的插桩调用)、C/C++语言标准和原项目配置保持一致
- 执行全量插桩后,回到Keil选择
Rebuild All全量编译,禁止用增量Build
- 完全关闭Keil、TBrun进程,手动删除项目下所有编译中间目录:
- 核对TBrun版本一致性
ldra_qq_test_comment的签名差异是版本迭代带来的不兼容变更:旧版TBrun该函数为单参数设计,新版本调整为3参数(参数分别为格式串、起始标记、换行标记)。当前报错的直接原因就是插桩生成的调用逻辑是单参数旧版,但是编译时加载的函数定义是3参数新版:- 和之前跑通用例的开发人员确认使用的TBrun具体版本号,本机安装完全一致的版本,不要跨大版本混用
- 检查Keil工程的头文件包含路径、静态库链接路径,把所有指向其他版本LDRA安装目录的路径全部删除,只保留当前匹配版本的相关路径
- 补兼容宏快速临时修复
如果暂时没法对齐版本,可以直接在TBrun生成的ldra.h头文件开头加兼容宏,强制适配单参数调用:
加完之后重新插桩编译即可,这个宏不会影响桩函数的正常逻辑,只是补了默认参数。#define ldra_qq_test_comment(fmt_str) ldra_qq_test_comment(fmt_str, 0, 1) - 排查Keil工程的冗余源文件
打开Keil的项目文件列表,检查是否手动导入过之前环境生成的插桩后my_source.cpp副本:如果手动把旧的插桩结果文件加进了工程,会出现同一个文件里既有旧版单参数调用、又有新版3参数定义的冲突。把所有手动导入的LDRA生成源文件全部从工程中移除,只保留原生业务源码,让TBrun插桩流程自动完成代码注入即可。
内容的提问来源于stack exchange,提问作者CivFan
相关产品推荐
相关产品推荐

