namespace Trace {
+ class File;
class Writer {
protected:
- void *g_gzFile;
+ File *m_file;
unsigned call_no;
std::vector<bool> functions;
Writer();
~Writer();
- void open(void);
bool open(const char *filename);
void close(void);
void writeNull(void);
void writeOpaque(const void *ptr);
+ void writeCall(Call *call);
+
protected:
void inline _write(const void *sBuffer, size_t dwBytesToWrite);
void inline _writeByte(char c);
void inline _writeString(const char *str);
};
+
+ /**
+ * A specialized Writer class, mean to trace the current process.
+ *
+ * In particular:
+ * - it creates a trace file based on the current process name
+ * - uses mutexes to allow tracing from multiple threades
+ * - flushes the output to ensure the last call is traced in event of
+ * abnormal termination
+ */
+ class LocalWriter : public Writer {
+ protected:
+ int acquired;
+
+ public:
+ /**
+ * Should never called directly -- use localWriter singleton below instead.
+ */
+ LocalWriter();
+ ~LocalWriter();
+
+ void open(void);
+
+ unsigned beginEnter(const FunctionSig *sig);
+ void endEnter(void);
+
+ void beginLeave(unsigned call);
+ void endLeave(void);
+
+ void flush(void);
+ };
+
+ /**
+ * Singleton.
+ */
+ extern LocalWriter localWriter;
}
#endif /* _TRACE_WRITER_HPP_ */