当前位置:  技术问答>linux和unix

自己写的一个日志类出现BUG,求帮忙查找原因

    来源: 互联网  发布时间:2016-12-11

    本文导语:  本帖最后由 oneonenight 于 2011-07-04 13:52:49 编辑 不是一运行就有错,而是长期运行才出的错,出错定位在下面这个方法: void CLog::WriteLog(LEVEL_TYPE level, const char* szTitle, const char* format,...)  {      //[时间][等级][标...

本帖最后由 oneonenight 于 2011-07-04 13:52:49 编辑
不是一运行就有错,而是长期运行才出的错,出错定位在下面这个方法:
void CLog::WriteLog(LEVEL_TYPE level, const char* szTitle, const char* format,...) 

    //[时间][等级][标题][文件:函数][内容] 
    char chTmp[20] = {0};                 //时间字符串 
    char szMsg[MAX_LOG_LENGTH + 1];     //日志信息字符串 
    // 输入检查 
    if (NULL == format) 
    { 
        return; 
    } 
 
    // 日期时间 
    strcpy(szMsg,"["); 
    struct tm *newtime; 
    time_t long_time; 
    time( &long_time );                 
    newtime = localtime( &long_time );  
    sprintf(chTmp, "%04d%02d%02d %02d:%02d:%02d" ,newtime->tm_year + 1900, 
        newtime->tm_mon + 1,newtime->tm_mday,newtime->tm_hour,newtime->tm_min,newtime->tm_sec);  
    strcat(szMsg,chTmp); 
    strcat(szMsg, "]"); 
    // 等级 
    strcat(szMsg, "["); 
    strcat(szMsg, LOG_ERROR[level]); 
    strcat(szMsg, "]"); 
    // 标题 
    if (NULL != szTitle) 
    { 
        strcat(szMsg,"["); 
        strcat(szMsg, szTitle); 
        strcat(szMsg,"]: "); 
    } 
    strcat(szMsg, "n"); 
    
    // 内容  
    va_list argp; 
    va_start(argp,format); 
 
    vsnprintf(&szMsg[strlen(szMsg)], MAX_LOG_LENGTH - strlen(szMsg), format, argp); 
     
     
    va_end(argp); 
    strcat(szMsg, "n"); 
    
    // 输出日志 
    this->PrintLog(szMsg); 

 
用GDB调试的错误信息如下:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x4aa10940 (LWP 24281)]
0x00000034688797c0 in strlen () from /lib64/libc.so.6
(gdb) bt
#0  0x00000034688797c0 in strlen () from /lib64/libc.so.6
#1  0x0000003468846b69 in vfprintf () from /lib64/libc.so.6
#2  0x000000346886988a in vsnprintf () from /lib64/libc.so.6
#3  0x000000000042669e in CLog::WriteLog(._35, const char *, const char *, ...) (this=0x65dc20, level=LEVEL_INFO, 
    szTitle=0x43bc1c "parse task", 
    format=0x2aaad0002c20 " 03001 1 2 107", '0' , "429 107", '0' , "429 107", '0' ...)
    at log/log.cpp:63

根据提示应该是vsnprintf出错了,但不知道为什么出错,怎么解决。

|
这个函数是怎么调用的呢?
完整的调用语句是什么

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 日志问题!高手帮忙!
  • ¥¥:-)给分请教:linux下的邮件发送日志是什么文件??我是用php的mail()函数的。急盼!各位仁兄请帮忙!!
  • 大家帮忙我诊断一下我的NameServer,日志里有大量的update 'domain1.com/IN' denied和lame server resolving。
  • 帮忙解析下这段日志,awk或者sed。
  • python异常信息堆栈输出到日志文件
  • linux下系统日志 操作日志 告警日志怎么存储啊?
  • 不同版本MSSQL清除日志方法介绍
  • solaris的系统日志文件叫什么名字?在什么目录下??如何打开/关闭系统日志????
  • Docker支持更深入的容器日志分析
  • 如何关闭red hat 7.3的核心日志和系统日志
  • ubuntu查看系统日志及相关文件介绍
  • 请问程序的日志重定向到别日志文件,系统会对该日志文件的大小作限制么
  • docker源码分析之容器日志处理与log-driver实现
  • 用shell如何获取一个日志中某个时间段的日志
  • c#实现把异常写入日志示例(异常日志)
  • sql server日志收缩脚本及解决日志增长过快的问题
  • 我通过C程序执行tail -f printlog(printlog为日志名),想要动态获取里面新进来的日志,怎么办?
  • 多进程输出日志,用什么方式保存日志效率比较高?
  • oracle 11g的警告日志和监听日志的删除方法
  • apache使用日志分割模块rotatelogs分割日志详解
  • mysql日志文件在哪 如何修改MySQL日志文件位置
  • 删除sqlserver数据库日志和没有日志的数据库恢复办法
  • (答者给分)crontab 定时执行sh 日志显示发送mail 如何查看错误日志
  • java自定义日志输出文件(log4j日志文件输出多个自定义日志文件)
  • 日志分析软件 Splunk


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3