2022-05-25 14:18:29 +02:00
|
|
|
//===== Copyright (c) Valve Corporation, All rights reserved. ========//
|
|
|
|
//
|
|
|
|
// Purpose:
|
|
|
|
//
|
|
|
|
// $NoKeywords: $
|
|
|
|
//
|
|
|
|
//====================================================================//
|
|
|
|
#ifndef DBG_H
|
|
|
|
#define DBG_H
|
2022-07-08 00:55:01 +02:00
|
|
|
#define AssertDbg assert
|
2023-03-17 00:04:08 +01:00
|
|
|
#define Verify( _exp ) ( _exp )
|
2022-05-25 14:18:29 +02:00
|
|
|
#include "tier0/dbgflag.h"
|
|
|
|
|
2022-07-06 21:11:32 +02:00
|
|
|
bool HushAsserts();
|
2022-05-25 14:18:29 +02:00
|
|
|
//-----------------------------------------------------------------------------
|
2022-08-17 12:28:52 +02:00
|
|
|
enum class EGlobalContext_t : int
|
|
|
|
{
|
|
|
|
GLOBAL_NONE = -4,
|
|
|
|
SCRIPT_SERVER,
|
|
|
|
SCRIPT_CLIENT,
|
|
|
|
SCRIPT_UI,
|
|
|
|
NATIVE_SERVER,
|
|
|
|
NATIVE_CLIENT,
|
|
|
|
NATIVE_UI,
|
|
|
|
NATIVE_ENGINE,
|
|
|
|
NATIVE_FS,
|
|
|
|
NATIVE_RTECH,
|
|
|
|
NATIVE_MS,
|
2022-11-27 10:19:23 +01:00
|
|
|
NATIVE_AUDIO,
|
|
|
|
NATIVE_VIDEO,
|
2022-08-17 12:28:52 +02:00
|
|
|
NETCON_S,
|
|
|
|
COMMON_C,
|
|
|
|
WARNING_C,
|
|
|
|
ERROR_C,
|
|
|
|
NONE
|
|
|
|
};
|
|
|
|
|
2022-05-25 14:18:29 +02:00
|
|
|
enum class eDLL_T : int
|
|
|
|
{
|
2022-11-27 10:19:23 +01:00
|
|
|
SERVER = 0, // server.dll (GameDLL)
|
|
|
|
CLIENT = 1, // client.dll (GameDLL)
|
|
|
|
UI = 2, // ui.dll (GameDLL)
|
|
|
|
ENGINE = 3, // engine.dll (Wrapper)
|
|
|
|
FS = 4, // filesystem_stdio.dll (FileSystem API)
|
|
|
|
RTECH = 5, // rtech_game.dll (RTech API)
|
|
|
|
MS = 6, // materialsystem_dx11.dll (MaterialSystem API)
|
|
|
|
AUDIO = 7, // binkawin64/mileswin64.dll (AudioSystem API)
|
|
|
|
VIDEO = 8, // bink2w64 (VideoSystem API)
|
|
|
|
NETCON = 9, // netconsole impl (RCON wire)
|
|
|
|
COMMON = 10 // general (No specific subsystem)
|
2022-05-25 14:18:29 +02:00
|
|
|
};
|
|
|
|
|
2022-11-27 10:19:23 +01:00
|
|
|
static const string sDLL_T[11] =
|
2022-05-25 14:18:29 +02:00
|
|
|
{
|
|
|
|
"Native(S):",
|
|
|
|
"Native(C):",
|
|
|
|
"Native(U):",
|
|
|
|
"Native(E):",
|
|
|
|
"Native(F):",
|
|
|
|
"Native(R):",
|
|
|
|
"Native(M):",
|
2022-11-27 10:19:23 +01:00
|
|
|
"Native(A):",
|
|
|
|
"Native(V):",
|
2022-05-25 14:18:29 +02:00
|
|
|
"Netcon(X):",
|
|
|
|
""
|
|
|
|
};
|
|
|
|
|
2022-11-27 10:19:23 +01:00
|
|
|
static const string sANSI_DLL_T[11] =
|
2022-05-25 14:18:29 +02:00
|
|
|
{
|
|
|
|
"\033[38;2;059;120;218mNative(S):",
|
|
|
|
"\033[38;2;118;118;118mNative(C):",
|
|
|
|
"\033[38;2;151;090;118mNative(U):",
|
|
|
|
"\033[38;2;204;204;204mNative(E):",
|
|
|
|
"\033[38;2;097;214;214mNative(F):",
|
|
|
|
"\033[38;2;092;181;089mNative(R):",
|
2022-11-27 10:19:23 +01:00
|
|
|
"\033[38;2;192;077;173mNative(M):",
|
2022-11-28 23:13:18 +01:00
|
|
|
"\033[38;2;238;108;030mNative(A):",
|
2022-11-27 10:19:23 +01:00
|
|
|
"\033[38;2;185;000;235mNative(V):",
|
2022-05-25 14:18:29 +02:00
|
|
|
"\033[38;2;204;204;204mNetcon(X):",
|
2022-08-03 18:34:44 +02:00
|
|
|
"\033[38;2;255;204;153m"
|
2022-05-25 14:18:29 +02:00
|
|
|
};
|
2022-10-30 10:08:14 +01:00
|
|
|
|
|
|
|
|
|
|
|
static const std::regex rANSI_EXP("\\\033\\[.*?m");
|
|
|
|
|
|
|
|
extern std::mutex g_LogMutex;
|
2022-05-25 14:18:29 +02:00
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Legacy Logging System
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
// These functions do not return.
|
2022-08-17 12:28:52 +02:00
|
|
|
PLATFORM_INTERFACE void NetMsg(EGlobalContext_t context, const char* fmt, ...) FMTFUNCTION(2, 3);
|
2022-05-25 14:18:29 +02:00
|
|
|
PLATFORM_INTERFACE void DevMsg(eDLL_T context, const char* fmt, ...) FMTFUNCTION(2, 3);
|
2022-10-30 10:08:14 +01:00
|
|
|
PLATFORM_INTERFACE void Warning(eDLL_T context, const char* fmt, ...) FMTFUNCTION(2, 3);
|
|
|
|
PLATFORM_INTERFACE void Error(eDLL_T context, const UINT code, const char* fmt, ...) FMTFUNCTION(3, 4);
|
2022-05-25 14:18:29 +02:00
|
|
|
|
|
|
|
// You can use this macro like a runtime assert macro.
|
|
|
|
// If the condition fails, then Error is called with the message. This macro is called
|
|
|
|
// like AssertMsg, where msg must be enclosed in parenthesis:
|
|
|
|
//
|
|
|
|
// ErrorIfNot( bCondition, ("a b c %d %d %d", 1, 2, 3) );
|
|
|
|
#define ErrorIfNot( condition, msg ) \
|
|
|
|
if ( (condition) ) \
|
|
|
|
; \
|
|
|
|
else \
|
|
|
|
{ \
|
|
|
|
Error msg; \
|
|
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Templates to assist in validating pointers:
|
|
|
|
|
|
|
|
// Have to use these stubs so we don't have to include windows.h here.
|
|
|
|
PLATFORM_INTERFACE void _AssertValidReadPtr(void* ptr, int count = 1);
|
|
|
|
PLATFORM_INTERFACE void _AssertValidWritePtr(void* ptr, int count = 1);
|
|
|
|
PLATFORM_INTERFACE void _AssertValidReadWritePtr(void* ptr, int count = 1);
|
|
|
|
PLATFORM_INTERFACE void _AssertValidStringPtr(const TCHAR* ptr, int maxchar);
|
|
|
|
|
|
|
|
#ifdef DBGFLAG_ASSERT
|
|
|
|
inline void AssertValidStringPtr(const TCHAR* ptr, int maxchar = 0xFFFFFF) { _AssertValidStringPtr(ptr, maxchar); }
|
|
|
|
template<class T> inline void AssertValidReadPtr(T* ptr, int count = 1) { _AssertValidReadPtr((void*)ptr, count); }
|
|
|
|
template<class T> inline void AssertValidWritePtr(T* ptr, int count = 1) { _AssertValidWritePtr((void*)ptr, count); }
|
|
|
|
template<class T> inline void AssertValidReadWritePtr(T* ptr, int count = 1) { _AssertValidReadWritePtr((void*)ptr, count); }
|
|
|
|
#define AssertValidThis() AssertValidReadWritePtr(this,sizeof(*this))
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
inline void AssertValidStringPtr(const TCHAR* ptr, int maxchar = 0xFFFFFF) { }
|
|
|
|
template<class T> inline void AssertValidReadPtr(T* ptr, int count = 1) { }
|
|
|
|
template<class T> inline void AssertValidWritePtr(T* ptr, int count = 1) { }
|
|
|
|
template<class T> inline void AssertValidReadWritePtr(T* ptr, int count = 1) { }
|
|
|
|
#define AssertValidThis()
|
|
|
|
#endif
|
|
|
|
#endif /* DBG_H */
|