搜索
bottom↓
回复: 12

Log输出打印输出LOG所在的函数名以及行号

[复制链接]

出0入0汤圆

发表于 2015-3-26 10:33:28 | 显示全部楼层 |阅读模式
我来发个代码,这个代码可以通过串口输出函数名以及行号。方便通过串口输出信号,查看哪里出现问题。
代码如下:
static char output[256]={0};
void dbg_print_log(const char *msg,
            const char *pccFunc,   
            const int   ciLine,
            const char *pccFmt,...)
{
        va_list arglst;

        va_start(arglst,pccFmt);
        vsnprintf(output,sizeof(output),pccFmt,arglst);
        printf("[%s][%s():%04d] %s\n",msg, pccFunc, ciLine, output);
        va_end(arglst);
}
void dbg_print_buf(const char *msg, ...)
{
        UINT16 i;
        UINT8* buf;
        UINT32 cnt;
        va_list arglst;
        va_start(arglst, msg);
        buf = va_arg( arglst, UINT8*);        
        cnt = va_arg( arglst, UINT32);

        printf("[%s][L:%d] ", msg,cnt);
        for(i=0;i<cnt;i++)
        {
                printf("0x%02X,",buf[i]);
        }
        printf("\n");
        va_end(arglst);
}
头文件:

void dbg_print_buf(const char *msg, ...);
void dbg_print_log(const char *msg,
            const char *pccFunc,   
            const int   ciLine,
            const char *pccFmt,...);
#define DBG_INFO(...) dbg_print_log("INFO", __FUNCTION__, __LINE__, __VA_ARGS__)
#define DBG_BUF(...) dbg_print_buf("BUFF",__VA_ARGS__)

比如输出:
[INFO][function():1100] hello world!
function为函数名,1100为log输出的行号。
这个代码超有用,以后出问题也不用死死的去代码里找了

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2015-3-26 10:36:16 | 显示全部楼层
#include <stdarg.h> 带上这个头文件。里面的printf必须关联串口输出。这个修改fput()函数,或者重写。或者putchar这个函数。后面希望有人补上printf这个函数的具体规则。毕竟不同的单片机,实现不一样

出0入0汤圆

 楼主| 发表于 2015-3-26 10:39:44 | 显示全部楼层
比如arm的可按照retarget。c重写fput函数

/*----------------------------------------------------------------------------
  fputc
*----------------------------------------------------------------------------*/
int fputc(int ch, FILE *f) {
  return (SendChar(ch));
}

出0入0汤圆

 楼主| 发表于 2015-3-26 10:40:22 | 显示全部楼层
51单片机的可重写putchar函数,在C51目录下的lib文件夹内的putchar.c文件中

出0入0汤圆

 楼主| 发表于 2015-3-26 10:40:56 | 显示全部楼层
如果还有其他方便调试的方法,大家请发言

出0入0汤圆

发表于 2015-3-26 11:05:13 | 显示全部楼层
这么好的东西,怎么没有人顶啊,想法很好.

出0入0汤圆

 楼主| 发表于 2015-3-26 11:11:57 | 显示全部楼层
举个例子:DBG_INFO("hello world! %d,%s,0x%x." , value , string , hex);

出0入4汤圆

发表于 2015-3-27 09:11:36 | 显示全部楼层
赞下,见过有人在蓝牙调试中用。

出0入0汤圆

发表于 2015-3-27 09:15:51 | 显示全部楼层

出0入0汤圆

发表于 2015-3-27 09:27:45 | 显示全部楼层
谢谢分享,习惯了仿真器

出0入0汤圆

发表于 2015-3-27 09:39:20 | 显示全部楼层
现场调试找bug的好办法,产品出去后是不会让你用仿真器的,这个必须学习,之前就考虑让串口多显示一些调试信息什么的。

出0入0汤圆

发表于 2015-3-30 21:01:57 | 显示全部楼层
嗯,真的超有用,谢谢分享。

出0入0汤圆

发表于 2015-3-30 21:39:12 | 显示全部楼层
谢谢分享,这方法不错。学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-8 22:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表