Joined work of nakee and mine, cleanup the logging code a bit.

This solves the random __Log symbol and crash problem on linux
Please tell us if you find problems in the logging code


git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2109 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
XTra.KrazzY
2009-02-04 15:28:39 +00:00
parent c43d8e9dcd
commit 77215fd27c
10 changed files with 60 additions and 181 deletions

View File

@ -196,14 +196,10 @@ inline u64 swap64(u64 data) {return(((u64)swap32(data) << 32) | swap32(data >> 3
} // end of namespace Common
//////////////////////////////////////////////////////////////////////////////////////////
// Utility functions
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////
// Message alerts
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum MSG_TYPE
{
INFORMATION,
@ -230,12 +226,7 @@ extern bool MsgAlert(const char* caption, bool yes_no, int Style, const char* fo
///////////////////////////
// Logging
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern void __Log(int logNumber, const char* text, ...);
extern void __Logv(int log, int v, const char *format, ...);
// dummy class
class LogTypes
@ -279,14 +270,25 @@ class LogTypes
};
};
#ifdef LOGGING
extern void __Log(int logNumber, const char* text, ...);
extern void __Logv(int log, int v, const char *format, ...);
void Host_UpdateLogDisplay();
// Logging macros. LOGGING is turned on from earlier in this file
#ifdef LOGGING
#ifdef _WIN32
#define LOG(t, ...) __Log(LogTypes::t, __VA_ARGS__);
#define LOGV(t,v, ...) __Log(LogTypes::t + (v)*100, __VA_ARGS__);
#define LOGP(t, ...) __Log(t, __VA_ARGS__);
#define LOGVP(t,v, ...) __Log(t + (v)*100, __VA_ARGS__);
#else
#define LOG(t, ...) __Log(LogTypes::t, ##__VA_ARGS__);
#define LOGV(t,v, ...) __Log(LogTypes::t + (v)*100, ##__VA_ARGS__);
#define LOGP(t, ...) __Log(t, ##__VA_ARGS__);
#define LOGVP(t,v, ...) __Log(t + (v)*100, ##__VA_ARGS__);
#endif
#define _dbg_assert_(_t_, _a_) \
if (!(_a_)){\
@ -305,6 +307,8 @@ void Host_UpdateLogDisplay();
#define LOG(_t_, ...)
#define LOGV(_t_,_v_, ...)
#define LOGP(_t_, ...)
#define LOGVP(_t_,_v_, ...)
#define _dbg_clear_()
#ifndef _dbg_assert_
#define _dbg_assert_(_t_, _a_) ;
@ -326,9 +330,7 @@ void Host_UpdateLogDisplay();
#endif
//////////////////////////////////////////////////////////////////////////////////////////
// Compile time asserts
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
namespace
{
@ -344,7 +346,6 @@ namespace
#endif
#endif
}
//////////////////////////////////
#endif // #ifndef _COMMON_H

View File

@ -106,19 +106,19 @@ void PrintCallstack()
}
}
void PrintCallstack(LogTypes::LOG_TYPE _Log)
void PrintCallstack(LogTypes::LOG_TYPE type)
{
u32 addr = Memory::ReadUnchecked_U32(PowerPC::ppcState.gpr[1]); // SP
__Logv(_Log, 1, "\n == STACK TRACE - SP = %08x ==\n", PowerPC::ppcState.gpr[1]);
LOGVP(type, 1, "\n == STACK TRACE - SP = %08x ==\n", PowerPC::ppcState.gpr[1]);
if (LR == 0) {
__Logv(_Log, 1, " LR = 0 - this is bad\n");
LOGVP(type, 1, " LR = 0 - this is bad\n");
}
int count = 1;
if (g_symbolDB.GetDescription(PowerPC::ppcState.pc) != g_symbolDB.GetDescription(LR))
{
__Log(_Log, " * %s [ LR = %08x ]\n", g_symbolDB.GetDescription(LR), LR);
LOGP(type, " * %s [ LR = %08x ]\n", g_symbolDB.GetDescription(LR), LR);
count++;
}
@ -129,14 +129,14 @@ void PrintCallstack(LogTypes::LOG_TYPE _Log)
const char *str = g_symbolDB.GetDescription(func);
if (!str || strlen(str) == 0 || !strcmp(str, "Invalid"))
str = "(unknown)";
__Logv(_Log, 3, " * %s [ addr = %08x ]\n", str, func);
LOGVP(type, 3, " * %s [ addr = %08x ]\n", str, func);
addr = Memory::ReadUnchecked_U32(addr);
}
}
void PrintDataBuffer(LogTypes::LOG_TYPE _Log, u8* _pData, size_t _Size, const char* _title)
void PrintDataBuffer(LogTypes::LOG_TYPE type, u8* _pData, size_t _Size, const char* _title)
{
__Log(_Log, _title);
LOGP(type, _title);
for (u32 j=0; j<_Size;)
{
std::string Temp;
@ -150,7 +150,7 @@ void PrintDataBuffer(LogTypes::LOG_TYPE _Log, u8* _pData, size_t _Size, const ch
break;
}
__Log(_Log, " Data: %s", Temp.c_str());
LOGP(type, " Data: %s", Temp.c_str());
}
}

View File

@ -138,12 +138,12 @@ protected:
void DumpCommands(u32 _CommandAddress, size_t _NumberOfCommands = 8,
int LogType = LogTypes::WII_IPC_HLE, int Verbosity = 0)
{
// Because I have to use __Logv here I add this #if
// Because I have to use LOGV here I add this #if
#if defined(_DEBUG) || defined(DEBUGFAST)
__Logv(LogType, Verbosity, "CommandDump of %s", GetDeviceName().c_str());
LOGVP(LogType, Verbosity, "CommandDump of %s", GetDeviceName().c_str());
for (u32 i = 0; i < _NumberOfCommands; i++)
{
__Logv(LogType, Verbosity, " Command%02i: 0x%08x", i,
LOGVP(LogType, Verbosity, " Command%02i: 0x%08x", i,
Memory::Read_U32(_CommandAddress + i*4));
}
#endif

View File

@ -86,29 +86,23 @@ struct TRectangle
};
//////////////////////////////////////////////////////////////////////////////////////////
// Logging
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void DebugLog(const char* _fmt, ...); // This one goes to the main program
void __Log(const char *format, ...); // This one is for the local console
void __Log(int type, const char *format, ...);
void HandleGLError();
#define ERROR_LOG __Log
#if defined(_DEBUG) || defined(DEBUGFAST)
// FIXME ugly hack for debug to build should use logmanager
//#define INFO_LOG if( g_Config.iLog & CONF_LOG ) __Log
//#define PRIM_LOG if( g_Config.iLog & CONF_PRIMLOG ) __Log
#define INFO_LOG __Log
#define PRIM_LOG __Log
#define DEBUG_LOG __Log
#ifdef _WIN32
#define ERROR_LOG(...) LOG(VIDEO, __VA_ARGS__)
#define INFO_LOG(...) LOG(VIDEO, __VA_ARGS__)
#define PRIM_LOG(...) LOG(VIDEO, __VA_ARGS__)
#define DEBUG_LOG(...) LOG(VIDEO, __VA_ARGS__)
#else
#define INFO_LOG(...)
#define PRIM_LOG(...)
#define DEBUG_LOG(...)
#define ERROR_LOG(...) LOG(VIDEO, ##__VA_ARGS__)
#define INFO_LOG(...) LOG(VIDEO, ##__VA_ARGS__)
#define PRIM_LOG(...) LOG(VIDEO, ##__VA_ARGS__)
#define DEBUG_LOG(...) LOG(VIDEO, ##__VA_ARGS__)
#endif
///////////////////////////////////
#endif // _VIDEOCOMMON_H