AIX下C/c++函数性能统计实现方法,改进版

  

  上一篇实现,是统计了每一次函数调用的层次关系和耗时。如果在函数调用比较多的情况下,更关心的是减少输出,只需要总计的耗时即可。另外如果是后台程序,输出到文件会更好。   

  

  因此,对程序做了改进。当设置TRACELOG环境变量,则输出到这个环境变量指定的文件中。如果设置了DETAILF,则会输出调用层次关系和每一次的耗时,否则只输出总计时间。   

  

  
  

  

  tr.cpp改进后的程序如下。   

  

     <李>   iostream
     李   <李>   # include fstream
  李   <李>   # include向量
  李   <李>   # include
地图   李   <李>   # include
  李   <李>   # include sysh
  李   <李>   
  李   <李>   使用stdvector
  李   <李>   使用stdmap
  李   <李>   利用std
  李   <李>   使用stdclog
  李   <李>   使用stdendl
  李   <李>   使用stdofstream
  李   <李>   使用stdostream
  李   <李>   
  李   <李>   外面的空白print_trace char procname
  李   <李>   
  李   <李>   struct Stat
  李   <李>   
  李   <李>   ,,,,级
  李   <李>   ,,,,名称
  李   <李>   ,,,长stm
  李   <李>   ,,,长etm
  李   <李>   ,,,长oitv
  李   <李>   ,,,Stat l s长的圣lvll名称stmst etm0 oitv0
  李   <李>   
  李   <李>   
  李   <李>   结构体和
  李   <李>   
  李   <李>   ,,,,问
  李   <李>   ,,,长itv
  李   <李>   ,,,和cnt0 itv0
  李   <李>   ,,,和operatorlong我
  李   <李>   ,,,
  李   <李>   ,,,,,,,问
  李   <李>   ,,,,,,,itvi
  李   <李>   ,,,,,,,返回这个
  李   <李>   ,,,
  李   <李>   
  李   <李>   
  李   <李>   名称空间
  李   <李>   
  李   <李>   vectorStat tracev
  李   <李>   地图和itvm
  李   <李>   clvl 0
  李   <李>   bool detailf getenv
  李   <李>   
  李   <李>   
  李   <李>   外面的空白
  李   <李>   __func_trace_enter char proc_name
  李   <李>   ,,,,,,,,,,,,,,,,,,char file_name
  李   <李>   ,,,,,,,,,,,,,,,,,,line_no
  李   <李>   ,,,,,,,,,,,,,,,,,,无效id
  李   <李>   
  李   <李>   printf proc_name file_name line_no id0 charid
  李   <李>   ,,,struct timeval nowtm
  李   <李>   ,,,gettimeofdaynowtm
  李   <李>   ,,,clvl
  李   <李>   ,,,tracevpush_backStatclvl proc_namefile_name nowtmtv_sec 1000000 nowtmtv_usec
  李   <李>   
  李   <李>   
  李   <李>   外面的空白
  李   <李>   __func_trace_exit char proc_name
  李   <李>   ,,,,,,,,,,,,,,,,,char file_name
  李   <李>   ,,,,,,,,,,,,,,,,,line_no
  李   <李>   ,,,,,,,,,,,,,,,,,无效id
  李   <李>   
  李   <李>   printf proc_name file_name line_no id0 charid
  李   <李>   ,,,struct timeval nowtm
  李   <李>   ,,,,itv
  李   <李>   ,,,gettimeofdaynowtm
  李   <李>   ,,,汽车iter tracev 1
  李   <李>   ,,,,iteretm 0
  李   <李>   ,,,,,,,iter
  李   <李>   ,,,iteretm nowtmtv_sec 1000000 nowtmtv_usec
  李   <李>   ,,,itv iteretm iterstm iteroitv
  李   <李>   ,,,itvmproc_nameitv
  李   <李>   ,,,,汽车tracevbegin年代!=iter s
  李   

AIX下C/c++函数性能统计实现方法,改进版