根据日志内容分析函数调用堆栈(function stack)

最近接受一个项目,因环境受限,无法进行对其代码调试。发生问题时,只能通过log内容分析原因。由于无法调试,函数间的调用关系只能通过查看源代码得知,比较痛苦。由于源代码中每个函数都增加了log,遂萌发通过log自动分析函数间的调用关系,现已实现,和感兴趣的朋友分享下,但愿对其有帮助。
    记录log的内容是:
   
    class  CPLog
 2  {
 3  public :
 4      CPLog( char   * szFileName,  char   * szFunctionName, UINT32 uLine)
 5      {
 6          m_pFileName  =  szFileName;
 7          m_pFunctionName  =  szFunctionName;
 8           static   long  nID  =   1 ;
 9 
10          m_nid  =  InterlockedIncrement( & nID);
11 
12           // write_log就不实现了,把这行日志写到文件中
13          write_log((  " ThreadID:%d +[S:%d]EnterFunc:%s +Line:%d "
14                       GetCurrentThreadId(), 
15                       m_nid,
16                       m_pFunctionName,
17                       uLine));
18      }
19       ~ CPLog()
20      {
21          write_log((  " ThreadID:%d +[E:%d]LeaveFunc:%s  "
22                       GetCurrentThreadId(), 
23                       m_nid,
24                       m_pFunctionName)));
25      }
26  private :
27       char   * m_pFileName;
28       char   * m_pFunctionName;
29       long  m_nid;
30  };
31 
32  #define  CP_LOG_FUNCTION(filename, funcname, lines)  \
33      CPLog mylogFunctionName(filename, funcname, lines)
    然后在每个函数入口的地方加上这句:
  
CP_LOG_FUNCTION(__FILE__, __FUNCTION__, __LINE__);
   最后,把log文件通过这个 python脚本文件(在这里不讲解了,自己看源代码吧)分析,即可
      funcstack.rar

  效果是这样的:(看法,从左到右,从上到下,如果存在函数调用没有结束也会有信息输出)

排版始终没弄好,请看这里http://www.cppblog.com/Apan/archive/2011/11/12/160001.html


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值