KrisLibrary  1.0.0
Trace.h
1 #ifndef UTILS_TRACE_H
2 #define UTILS_TRACE_H
3 
4 #include <KrisLibrary/Logger.h>
5 #include <vector>
6 #include <list>
7 #include <string>
8 #include <iostream>
9 #include <KrisLibrary/Timer.h>
10 #include "StatCollector.h"
11 class File;
12 
13 struct TraceFunctionCall;
14 
16 {
17  std::string name;
18  StatCollector stats;
19 };
20 
21 struct TraceItem
22 {
23  TraceItem();
24  TraceFunctionCall* call;
25  std::string text;
26 };
27 
29 {
33  void ClearChildren();
34 
35  TraceFunction* type;
36  TraceFunctionCall* parent;
37  std::string args;
38  std::vector<TraceItem> children;
39  std::string ret;
40  double calltime,endtime;
41 };
42 
55 class Trace
56 {
57 public:
58  Trace();
59  ~Trace();
60  void Clear();
61  void ResetTrace();
62  bool Load(const char* fn);
63  bool Save(const char* fn);
64  void DumpTrace(std::ostream& out=std::cout) const;
65  void DumpStats(std::ostream& out=std::cout) const;
66 
67  void Call(const char* function,const char* args=NULL);
68  void CallFmt(const char* function,const char* fmt,...);
69  void EndCall(const char* function,const char* ret=NULL);
70  void EndCallFmt(const char* function,const char* fmt,...);
71  void Log(const char* txt);
72 
73 private:
74  bool LoadIter(File& f,TraceItem& item,TraceFunctionCall* parent);
75  bool SaveIter(File& f,const TraceItem& item);
76  void DumpIter(std::ostream& out,const TraceFunctionCall* call,int depth) const;
77  TraceFunction* FindFunction(const char* func);
78  TraceFunctionCall* FindParentIter(TraceFunctionCall* call,TraceFunction* func);
79  void BeginCall(TraceFunctionCall* call);
80  void EndCall(TraceFunctionCall* call);
81 
82 public:
83  TraceFunctionCall root;
84  TraceFunctionCall* cur;
85  std::list<TraceFunction> funcs;
86  Timer timer;
87 };
88 
89 #endif
Allows detailed tracing of program execution.
Definition: Trace.h:55
Definition: Trace.h:15
Definition: Trace.h:21
The logging system used in KrisLibrary.
Collects statistics (min,max,mean,stddev,etc) on floating-point data.
Definition: StatCollector.h:27
Definition: Timer.h:6
A cross-platform class for reading/writing binary data.
Definition: File.h:47
Definition: Trace.h:28