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 12typedef char* SZ; 13 14#define LIGHT_SYMBOLS_FILE "LIGHT_SYMBOLS_FILE" 15 16class 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 30public: 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 37private: 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