1 #ifndef __LIGHT_SYMBOLS__ 2 #define __LIGHT_SYMBOLS__ 3 #define LS_TRACE(functionName,fileId,lineNumber) LightSymbol __lstr(functionName,fileId,lineNumber); 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <stdlib.h> 8 9 //#include <pthread.h> 10 #include <windows.h> 11 12 typedef char* SZ; 13 14 #define LIGHT_SYMBOLS_FILE "LIGHT_SYMBOLS_FILE" 15 16 class LightSymbol { 17 const char* sym; 18 int fileId; 19 int lineNumber; 20 21 LightSymbol* parentFrame; 22 23 typedef LightSymbol* PLightSymbol; 24 25 static PLightSymbol lsFrames[1000]; 26 static HANDLE handleFrames[1000]; 27 static SZ* fileNames; 28 static bool busted; 29 30 public: 31 LightSymbol(const char* sym, int fileId, int lineNumber); 32 33 ~LightSymbol(); 34 35 static bool GetCallStack(char* sz, int len, const char* separator); 36 37 private: 38 39 static LightSymbol** getThreadFrameContainer(); 40 41 bool GetCallStackCore(char* sz, int len, const char* separator) const ; 42 43 static LightSymbol* GetCurrentFrame() ; 44 45 static void SetCurrentFrame(LightSymbol* ls) ; 46 47 static const char* trim(char* sz) ; 48 }; 49 50 #endif 51