Browse Source

add debug logger

pull/77/head
nillerusr 2 years ago
parent
commit
dc5774a698
  1. 3
      launcher/launcher.cpp
  2. 8
      public/tier0/dbg.h
  3. 86
      tier0/dbg.cpp

3
launcher/launcher.cpp

@ -765,6 +765,9 @@ bool CSourceAppSystemGroup::Create()
bool CSourceAppSystemGroup::PreInit() bool CSourceAppSystemGroup::PreInit()
{ {
if ( !CommandLine()->FindParm( "-nolog" ) )
DebugLogger()->Init("engine.log");
CreateInterfaceFn factory = GetFactory(); CreateInterfaceFn factory = GetFactory();
ConnectTier1Libraries( &factory, 1 ); ConnectTier1Libraries( &factory, 1 );
ConVar_Register( ); ConVar_Register( );

8
public/tier0/dbg.h

@ -48,6 +48,14 @@
class Color; class Color;
class IDbgLogger
{
public:
virtual void Init(const char *logfile) = 0;
virtual void Write(const char *data) = 0;
};
PLATFORM_INTERFACE IDbgLogger *DebugLogger();
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// Usage model for the Dbg library // Usage model for the Dbg library

86
tier0/dbg.cpp

@ -49,11 +49,82 @@
// memdbgon must be the last include file in a .cpp file!!! // memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h" #include "tier0/memdbgon.h"
class CDbgLogger : public IDbgLogger
{
public:
CDbgLogger();
~CDbgLogger();
void Init(const char *logfile);
void Write(const char *data);
private:
FILE *file;
float flStartTime;
bool bShouldLog;
};
CDbgLogger::CDbgLogger()
{
bShouldLog = false;
flStartTime = Plat_FloatTime();
}
void CDbgLogger::Init(const char *logfile)
{
time_t timeCur;
struct tm tmStruct;
char szTime[256];
bShouldLog = true;
time( &timeCur );
Plat_gmtime( &timeCur, &tmStruct );
Plat_ctime( &timeCur, szTime, sizeof(szTime) );
file = fopen(logfile, "w+");
fprintf(file, ">>> Engine started at %s\n", szTime);
fflush(file);
}
CDbgLogger::~CDbgLogger()
{
if( !bShouldLog )
return;
time_t timeCur;
struct tm tmStruct;
char szTime[256];
time( &timeCur );
Plat_gmtime( &timeCur, &tmStruct );
Plat_ctime( &timeCur, szTime, sizeof(szTime) );
fprintf(file, "\n>>> Engine closed at %s\n", szTime);
fclose(file);
}
void CDbgLogger::Write(const char *data)
{
if( !bShouldLog )
return;
fprintf(file, "[%.4f] ", Plat_FloatTime() - flStartTime);
fprintf(file, "%s", data);
fflush(file);
}
static CDbgLogger g_DbgLogger;
IDbgLogger *DebugLogger() { return &g_DbgLogger; }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// internal structures // internal structures
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
enum enum
{ {
MAX_GROUP_NAME_LENGTH = 48 MAX_GROUP_NAME_LENGTH = 48
}; };
@ -275,7 +346,7 @@ DBG_INTERFACE void _SpewInfo( SpewType_t type, const tchar* pFile, int line )
static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, int nLevel, const Color *pColor, const tchar* pMsgFormat, va_list args ) static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, int nLevel, const Color *pColor, const tchar* pMsgFormat, va_list args )
{ {
tchar pTempBuffer[5020]; tchar pTempBuffer[8192];
assert( _tcslen( pMsgFormat ) < sizeof( pTempBuffer) ); // check that we won't artifically truncate the string assert( _tcslen( pMsgFormat ) < sizeof( pTempBuffer) ); // check that we won't artifically truncate the string
@ -288,7 +359,7 @@ static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, i
if ( len == -1 ) if ( len == -1 )
return SPEW_ABORT; return SPEW_ABORT;
/* Create the message.... */ /* Create the message.... */
int val= _vsntprintf( &pTempBuffer[len], sizeof( pTempBuffer ) - len - 1, pMsgFormat, args ); int val= _vsntprintf( &pTempBuffer[len], sizeof( pTempBuffer ) - len - 1, pMsgFormat, args );
if ( val == -1 ) if ( val == -1 )
@ -302,10 +373,10 @@ static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, i
{ {
len += _stprintf( &pTempBuffer[len], _T("\n") ); len += _stprintf( &pTempBuffer[len], _T("\n") );
} }
assert( len < sizeof(pTempBuffer)/sizeof(pTempBuffer[0]) - 1 ); /* use normal assert here; to avoid recursion. */ assert( len < sizeof(pTempBuffer)/sizeof(pTempBuffer[0]) - 1 ); /* use normal assert here; to avoid recursion. */
assert( s_SpewOutputFunc ); assert( s_SpewOutputFunc );
/* direct it to the appropriate target(s) */ /* direct it to the appropriate target(s) */
SpewRetval_t ret; SpewRetval_t ret;
assert( g_pSpewInfo == NULL ); assert( g_pSpewInfo == NULL );
@ -317,8 +388,9 @@ static SpewRetval_t _SpewMessage( SpewType_t spewType, const char *pGroupName, i
}; };
#ifdef ANDROID #ifdef ANDROID
__android_log_print( ANDROID_LOG_INFO, "SRCENG", "%s", pTempBuffer ); __android_log_print( ANDROID_LOG_INFO, "SRCENG", "%s", pTempBuffer );
#endif #endif
g_DbgLogger.Write( pTempBuffer );
g_pSpewInfo = &spewInfo; g_pSpewInfo = &spewInfo;
ret = s_SpewOutputFunc( spewType, pTempBuffer ); ret = s_SpewOutputFunc( spewType, pTempBuffer );

Loading…
Cancel
Save