diff options
Diffstat (limited to 'src/common/Debugging')
-rw-r--r-- | src/common/Debugging/Errors.cpp | 17 | ||||
-rw-r--r-- | src/common/Debugging/Errors.h | 12 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/common/Debugging/Errors.cpp b/src/common/Debugging/Errors.cpp index 9f832caff4d..7ad137715da 100644 --- a/src/common/Debugging/Errors.cpp +++ b/src/common/Debugging/Errors.cpp @@ -58,8 +58,8 @@ namespace int32 length = vsnprintf(nullptr, 0, format, len); va_end(len); - formatted.resize(length + 1); - vsnprintf(&formatted[0], length + 1, format, args); + formatted.resize(length); + vsnprintf(&formatted[0], length, format, args); return formatted; } @@ -68,20 +68,20 @@ namespace namespace Trinity { -void Assert(char const* file, int line, char const* function, char const* message) +void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message) { - std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message); + std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + debugInfo + '\n'; fprintf(stderr, "%s", formattedMessage.c_str()); fflush(stderr); Crash(formattedMessage.c_str()); } -void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) +void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message, char const* format, ...) { va_list args; va_start(args, format); - std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + FormatAssertionMessage(format, args) + '\n'; + std::string formattedMessage = StringFormat("\n%s:%i in %s ASSERTION FAILED:\n %s\n", file, line, function, message) + FormatAssertionMessage(format, args) + '\n' + debugInfo + '\n'; va_end(args); fprintf(stderr, "%s", formattedMessage.c_str()); @@ -137,3 +137,8 @@ void AbortHandler(int sigval) } } // namespace Trinity + +std::string GetDebugInfo() +{ + return ""; +} diff --git a/src/common/Debugging/Errors.h b/src/common/Debugging/Errors.h index f64bff72fd1..befb269a120 100644 --- a/src/common/Debugging/Errors.h +++ b/src/common/Debugging/Errors.h @@ -19,11 +19,12 @@ #define TRINITYCORE_ERRORS_H #include "Define.h" +#include <string> namespace Trinity { - DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, char const* message) ATTR_NORETURN; - DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(5, 6); + DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message) ATTR_NORETURN; + DECLSPEC_NORETURN TC_COMMON_API void Assert(char const* file, int line, char const* function, std::string debugInfo, char const* message, char const* format, ...) ATTR_NORETURN ATTR_PRINTF(6, 7); DECLSPEC_NORETURN TC_COMMON_API void Fatal(char const* file, int line, char const* function, char const* message, ...) ATTR_NORETURN ATTR_PRINTF(4, 5); @@ -37,6 +38,8 @@ namespace Trinity } // namespace Trinity +TC_COMMON_API std::string GetDebugInfo(); + #if TRINITY_COMPILER == TRINITY_COMPILER_MICROSOFT #define ASSERT_BEGIN __pragma(warning(push)) __pragma(warning(disable: 4127)) #define ASSERT_END __pragma(warning(pop)) @@ -49,7 +52,8 @@ namespace Trinity #define EXCEPTION_ASSERTION_FAILURE 0xC0000420L #endif -#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, #cond, ##__VA_ARGS__); } while(0) ASSERT_END +#define WPAssert(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, GetDebugInfo(), #cond, ##__VA_ARGS__); } while(0) ASSERT_END +#define WPAssert_NODEBUGINFO(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Assert(__FILE__, __LINE__, __FUNCTION__, "", #cond, ##__VA_ARGS__); } while(0) ASSERT_END #define WPFatal(cond, ...) ASSERT_BEGIN do { if (!(cond)) Trinity::Fatal(__FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__); } while(0) ASSERT_END #define WPError(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Error(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END #define WPWarning(cond, msg) ASSERT_BEGIN do { if (!(cond)) Trinity::Warning(__FILE__, __LINE__, __FUNCTION__, (msg)); } while(0) ASSERT_END @@ -57,8 +61,10 @@ namespace Trinity #ifdef PERFORMANCE_PROFILING #define ASSERT(cond, ...) ((void)0) +#define ASSERT_NODEBUGINFO(cond, ...) ((void)0) #else #define ASSERT WPAssert +#define ASSERT_NODEBUGINFO WPAssert_NODEBUGINFO #endif #define ABORT WPAbort |