根据日志内容分析函数调用关系

最近接受一个项目,因环境受限,无法进行对其代码调试。发生问题时,只能通过log内容分析原因。由于无法调试,函数间的调用关系只能通过查看源代码得知,比较痛苦。由于源代码中每个函数都增加了log,遂萌发通过log自动分析函数间的调用关系,现已实现,和感兴趣的朋友分享下,但愿对其有帮助。
    记录log的内容是: 
   

 1  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
   效果是这样的:(看法,从左到右,从上到下,如果存在函数调用没有结束也会有信息输出)

main ----> CShell::onInitCompleted ----> CShell::stopInitializationWorker ----> CShellAsyncTask:: ~ CShellAsyncTask
                                            
----> CShell::writeUnitIdToHdd ----> CShell::getHDDPath
                                                                                     
----> CAppManager::writeUnitIdToSdCard ----> get_os_version
                                                                                                                                             
----> GetFileVersion
                                                                                                                                            
----> CShell::ShellIniSettings
*****************************************
There are 2 function not end and function stack is:
CShell::onInitCompleted, line:159
main, line:23
*****************************************


   
 注:转发请注明来源,谢谢!

转载于:https://www.cnblogs.com/caipan/archive/2011/12/21/2295542.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值