aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/include
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-05-03 15:09:35 +0200
committerGitHub Enterprise <[email protected]>2024-05-03 15:09:35 +0200
commit75b91b3f2eb21332a35255eae3c523ad2d2e9bc7 (patch)
treed0db8b85af12bff7acbfe8a8e091169e89307b8b /src/zencore/include
parent5.5.1 (diff)
downloadzen-75b91b3f2eb21332a35255eae3c523ad2d2e9bc7.tar.xz
zen-75b91b3f2eb21332a35255eae3c523ad2d2e9bc7.zip
assert improvements (#72)
- Improvement: Asserts gives an immediate ERROR log entry with callstack and reason - Improvement: Asserts flushes the log before sending error report to Sentry
Diffstat (limited to 'src/zencore/include')
-rw-r--r--src/zencore/include/zencore/logging.h1
-rw-r--r--src/zencore/include/zencore/zencore.h35
2 files changed, 11 insertions, 25 deletions
diff --git a/src/zencore/include/zencore/logging.h b/src/zencore/include/zencore/logging.h
index 6d44e31df..bffbe84b4 100644
--- a/src/zencore/include/zencore/logging.h
+++ b/src/zencore/include/zencore/logging.h
@@ -26,6 +26,7 @@ namespace zen::logging {
void InitializeLogging();
void ShutdownLogging();
bool EnableVTMode();
+void FlushLogging();
LoggerRef Default();
void SetDefault(std::string_view NewDefaultLoggerId);
diff --git a/src/zencore/include/zencore/zencore.h b/src/zencore/include/zencore/zencore.h
index cd1a34c7b..d21c0e7e2 100644
--- a/src/zencore/include/zencore/zencore.h
+++ b/src/zencore/include/zencore/zencore.h
@@ -47,40 +47,25 @@ public:
struct CallstackFrames* _Callstack = nullptr;
};
+struct CallstackFrames;
+
struct AssertImpl
{
- ZEN_FORCENOINLINE ZEN_DEBUG_SECTION AssertImpl() : PrevAssertImpl(CurrentAssertImpl) { CurrentAssertImpl = this; }
- virtual ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ~AssertImpl() { CurrentAssertImpl = PrevAssertImpl; }
+ ZEN_FORCENOINLINE ZEN_DEBUG_SECTION AssertImpl();
+ virtual ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ~AssertImpl();
static void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ExecAssert
- [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg)
- {
- AssertImpl* AssertImpl = CurrentAssertImpl;
- while (AssertImpl)
- {
- AssertImpl->OnAssert(Filename, LineNumber, FunctionName, Msg);
- AssertImpl = AssertImpl->PrevAssertImpl;
- }
- ThrowAssertException(Filename, LineNumber, FunctionName, Msg);
- }
-
- virtual void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION OnAssert(const char* Filename,
- int LineNumber,
- const char* FunctionName,
- const char* Msg)
- {
- ZEN_UNUSED(Filename);
- ZEN_UNUSED(LineNumber);
- ZEN_UNUSED(FunctionName);
- ZEN_UNUSED(Msg);
- }
+ [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg);
+
+ virtual void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION
+ OnAssert(const char* Filename, int LineNumber, const char* FunctionName, const char* Msg, CallstackFrames* Callstack);
protected:
static void ZEN_FORCENOINLINE ZEN_DEBUG_SECTION ThrowAssertException
- [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg);
+ [[noreturn]] (const char* Filename, int LineNumber, const char* FunctionName, const char* Msg, CallstackFrames* Callstack);
static AssertImpl* CurrentAssertImpl;
static AssertImpl DefaultAssertImpl;
- AssertImpl* PrevAssertImpl = nullptr;
+ AssertImpl* NextAssertImpl = nullptr;
};
} // namespace zen