#include #define CANVAS_PATH "CANVAS_PATH" class SkFile { FILE* file; bool busted; char* sz; mutable int i; public: SkFile(unsigned long id) { file = NULL; busted = false; sz = new char[100000]; set(id); i = 100; } ~SkFile() { delete sz; if (file) { fclose(file); } } void set(unsigned long id) { if (busted) { return; } if (file == NULL) { char sz[10000]; sprintf(sz, "%s\\%ul.callstacks.txt", getenv(CANVAS_PATH), id); file = fopen(sz, "a"); if (file == NULL) { busted = true; } fprintf(file, "\n\n\nNEW SESSION, just coliding ids ... should generate a new file ideally ... \n\n\n"); } } void appendLine(const char* sz) const { if (busted) { return; } fprintf(file, "%s\n", sz); } void dump(bool flush = false) const { if (busted) { return; } LightSymbol::GetCallStack(sz, 100000, " >- "); appendLine(sz); i--; if (i < 0 || flush) { i = 100; fflush(file); } } };