简单调试打印函数

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include "debug_message.h"

void debug_message(const char *ptr, ...)

{


#ifdef DEBUG_OPEN


char *debug_buf = NULL;
va_list arg_ptr;
int n = 0;
int buf_len = 10;


/* 判断传入的参数是否有效 */
if(NULL == ptr)
{
printf("pass param error\n");
return ;
}


while(1)
{

/* 申请保存打印信息的缓存 */
debug_buf = malloc(buf_len);
if(NULL == debug_buf)
{
printf("fail to malloc\n");
break ;
}
memset(debug_buf, 0, buf_len);

va_start(arg_ptr, ptr);
n = vsnprintf(debug_buf, buf_len, ptr, arg_ptr);
va_end(arg_ptr);

/*vsnprintf返回正确,并且分配的内存
足够存放打印信息*/
if(n > -1 && n < buf_len)
{
printf("n = %d\n", n);
printf("%s", debug_buf);
break ;
}


/* vsnprintf函数返回错误*/
if(n < 0)
{
printf("debug fun error\n");
break ;
}

/* 传入的打印信息大的超出预期,返回*/
if(buf_len > 102400)
{
printf("pass string is too long\n");
break ;
}


/* 原来分配的打印信息的缓存不够大,
释放掉后,再次分配较大的缓存*/
free(debug_buf);
buf_len *= 2;
}

free(debug_buf);

#endif
return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值