代码样例
在如下的fun函数中存在printf语句,如果下面的代码片段想要达到100%的覆盖率,则需要考虑打桩printf函数,并且在桩中修改参数d所指向的值。
int fun(int a, int b)
{
char d[10] = "hello";
//char d[10];
printf("+++++++++++++%d%s\n", a, d);
if (d[0] == 't')
;
else
;

//puts(d);
return 1;

}
解决方法
对于多变参数的打桩处理,需要考虑使用特别的方法,及stdarg.h头文件中定义的va_list,关于这部分介绍,可参见wiki: https://en.wikipedia.org/wiki/Variadic_function 。
基于上面wiki的知识,我们则可以利用C++test在对应的printf用户桩中进行相关代码处理,代码片段如下所示:
EXTERN_C_LINKAGE int __attribute__((__cdecl__)) printf (const char * _MT_var4, ...) ;
EXTERN_C_LINKAGE int __attribute__((__cdecl__)) CppTest_Stub_printf (const char * _MT_var2, ...)
{
//static char c[]="ttt";

int arg2 = 0;

char * arg3=NULL;
va_list ap;//设定参数列表容器
         puts("stub now");  
va_start(ap, _MT_var2); //开始获取参数列表
arg2 = va_arg(ap,int);  //递进获取对应参数,需要注意: 第二个参数要指定对应准确的实际方法调用类型
arg3 = va_arg(ap,char*); //递进获取参数,注意fun函数中的第三个参数是数组即指针类型
puts(arg3);  
     if(CppTest_IsCurrentTestCase("TestSuite_PrinftTest_c_9d31e552_test_case_fun_1"))  //设定对应测试用例来修改d数组的值
arg3[0] = 't';
      puts("printf arg3 again: ");
puts(arg3);
va_end(ap);
}
最后可以看到,如上打桩后,fun函数可以成功实现覆盖率100%。

转载于:https://www.cnblogs.com/kwang-cai/p/5613213.html

C++test对多变参数的函数打桩处理技巧相关推荐

  1. 函数打桩原理_难重现问题定位“函数打桩”

    Authon:Baohaitao Date: 2016-11-25 目的: linux应用软件运行过程中出现难重现的无规律死机,在core文件中gdb中调试没有发现有价值信息:这里给出了另一个思路:函 ...

  2. Go 学习笔记(15)— 函数(01)[函数定义、函数特点、多值返回、实参形参、变长参数,函数作为参数调用]

    1. 函数定义 Go 语言最少有个 main() 函数.函数声明告诉了编译器函数的名称,返回类型和参数. func funcName(parameter_list)(result_list) {fun ...

  3. python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)

    1. 函数的作⽤ 函数就是将⼀段具有独⽴功能的代码块整合到⼀个整体并命名,在需要的位置调⽤这个名称即可完成对应的需求. 函数在开发过程中,可以更⾼效的实现代码重⽤. 2. 函数的使⽤步骤 2.1 定义 ...

  4. 解决onclick事件调用其它带参数的函数方法无效的问题

    不解以下现象: 原始版本代码:可跳过代码直接看解决方案部分.前面的文字是在解决问题时的思考. <body> <div id="div1"><form ...

  5. windows 下实现函数打桩:拦截API方式

    windows 下实现函数打桩:拦截API方式 近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. 可是也足足困扰另外我一 ...

  6. PHP扩展开发入门3------带参数的函数

    2019独角兽企业重金招聘Python工程师标准>>> 原来笔记,就和撸代码一样,都很随性.后来看的代码和博客多了.发现太随性了,很难撸出高质量的代码,很难写出能看懂的笔记. 记笔记 ...

  7. 分段函数是不是一定初等函数_查漏补缺问题64:一个含多参数分段函数的连续性与可导性讨论...

    一个含多参数分段函数的连续性与可导性讨论 题目: 设, 定义函数 (1) 讨论当满足什么条件时,函数在0点连续. (2) 讨论当满足什么条件时,函数在0点可导. (3) 讨论当满足什么条件时,函数的导 ...

  8. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  9. python四个带 key 参数的函数(max、min、map、filter)

    四个带 key 参数的函数: max()点击查看详细 min()点击查看详细 map()点击查看详细 filter()点击查看详细 1)max(iterable, key) key:相当于对可迭代对象 ...

  10. python 装饰器 参数-python函数装饰器之带参数的函数和带参数的装饰器用法示例...

    本文实例讲述了python函数装饰器之带参数的函数和带参数的装饰器用法.分享给大家供大家参考,具体如下: 1. 函数带多个参数 # 普通的装饰器, 打印函数的运行时间 def decrator(fun ...

最新文章

  1. PHP 设计模式系列 —— 资源库模式(Repository)
  2. java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
  3. 【初印象】Android手机屏幕适配API:nodpi,xhdpi,hdpi,mdpi,ldpi
  4. Spring 基于注解(annotation)的配置之@Qualifier注解
  5. powershell 脚本运行策略,参数....
  6. 专题导读:科学数据治理
  7. Docker 修改容器名称
  8. 数据库-MySQL-数据库设计-外键
  9. VB案例:素数判断与合数分解
  10. 网站(前端、后端)性能(架构)优化手段
  11. SolrCloud Hello Word
  12. 归类常用控件GroupBox、TabControl、Expander
  13. apache poi使用例_Apache POI使用详解
  14. 3S基础知识:在VC++中嵌入MapX的集成二次开发
  15. 更多:Racket系统编程
  16. 2016年总结与2017展望
  17. 提取Blast2go blast结果中的一部分
  18. 软件测试员最核心的竞争力究竟是什么
  19. 广东省计算机媒体大赛,年广东省大学生计算机设计大赛.doc
  20. SIGIR2022 | 基于Prompt的用户自选公平性推荐算法

热门文章

  1. 第二节:各种路由约束(动态路由、静态路由、组合路由、正则约束、命名空间约束、区域内路由)...
  2. Android binder
  3. cocos2dx 在win32打开黑色命令行
  4. unity camera aspect
  5. 关于打印 毕业设计资料
  6. 图的遍历(广度优先遍历)- 数据结构和算法61
  7. PHP 配置open_basedir,让各虚拟站点独立运行
  8. JAVA 基础语法——开发环境以及J2SE代码实现
  9. centos7.2如何升级到centos7.3最新版本
  10. c/c++混编到的问题 extern C 介绍【转】